OLD | NEW |
(Empty) | |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "net/http/ntlm_buffer_reader.h" |
| 6 |
| 7 #include "base/macros.h" |
| 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "net/http/ntlm.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 |
| 12 namespace net { |
| 13 |
| 14 TEST(NtlmBufferReaderTest, Initialization) { |
| 15 const uint8_t buf[1] = {0}; |
| 16 NtlmBufferReader reader(buf, arraysize(buf)); |
| 17 |
| 18 EXPECT_EQ(arraysize(buf), reader.GetLength()); |
| 19 EXPECT_EQ(0u, reader.GetCursor()); |
| 20 EXPECT_FALSE(reader.IsEndOfBuffer()); |
| 21 EXPECT_TRUE(reader.CanRead(1)); |
| 22 EXPECT_FALSE(reader.CanRead(2)); |
| 23 EXPECT_TRUE(reader.CanReadFrom(0, 1)); |
| 24 EXPECT_TRUE(reader.CanReadFrom(ntlm::SecurityBuffer(0, 1))); |
| 25 EXPECT_FALSE(reader.CanReadFrom(1, 1)); |
| 26 EXPECT_FALSE(reader.CanReadFrom(ntlm::SecurityBuffer(1, 1))); |
| 27 EXPECT_FALSE(reader.CanReadFrom(0, 2)); |
| 28 EXPECT_FALSE(reader.CanReadFrom(ntlm::SecurityBuffer(0, 2))); |
| 29 |
| 30 // With length=0 the offset can be out of bounds. |
| 31 EXPECT_TRUE(reader.CanReadFrom(99, 0)); |
| 32 EXPECT_TRUE(reader.CanReadFrom(ntlm::SecurityBuffer(99, 0))); |
| 33 } |
| 34 |
| 35 TEST(NtlmBufferReaderTest, Read16) { |
| 36 const uint8_t buf[2] = {0x22, 0x11}; |
| 37 const uint16_t expected = 0x1122; |
| 38 |
| 39 NtlmBufferReader reader(buf, arraysize(buf)); |
| 40 |
| 41 uint16_t actual; |
| 42 EXPECT_TRUE(reader.ReadUInt16(&actual)); |
| 43 EXPECT_EQ(expected, actual); |
| 44 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 45 EXPECT_FALSE(reader.ReadUInt16(&actual)); |
| 46 } |
| 47 |
| 48 TEST(NtlmBufferReaderTest, Read32) { |
| 49 const uint8_t buf[4] = {0x44, 0x33, 0x22, 0x11}; |
| 50 const uint32_t expected = 0x11223344; |
| 51 |
| 52 NtlmBufferReader reader(buf, arraysize(buf)); |
| 53 |
| 54 uint32_t actual; |
| 55 EXPECT_TRUE(reader.ReadUInt32(&actual)); |
| 56 EXPECT_EQ(expected, actual); |
| 57 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 58 EXPECT_FALSE(reader.ReadUInt32(&actual)); |
| 59 } |
| 60 |
| 61 TEST(NtlmBufferReaderTest, Read64) { |
| 62 const uint8_t buf[8] = {0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11}; |
| 63 const uint64_t expected = 0x1122334455667788; |
| 64 |
| 65 NtlmBufferReader reader(buf, arraysize(buf)); |
| 66 |
| 67 uint64_t actual; |
| 68 EXPECT_TRUE(reader.ReadUInt64(&actual)); |
| 69 EXPECT_EQ(expected, actual); |
| 70 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 71 EXPECT_FALSE(reader.ReadUInt64(&actual)); |
| 72 } |
| 73 |
| 74 TEST(NtlmBufferReaderTest, ReadBytes) { |
| 75 const uint8_t expected[8] = {0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11}; |
| 76 uint8_t actual[8]; |
| 77 |
| 78 NtlmBufferReader reader(expected, arraysize(expected)); |
| 79 |
| 80 EXPECT_TRUE(reader.ReadBytes(actual, arraysize(actual))); |
| 81 EXPECT_EQ(0, memcmp(actual, expected, arraysize(actual))); |
| 82 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 83 EXPECT_FALSE(reader.ReadBytes(actual, 1)); |
| 84 } |
| 85 |
| 86 TEST(NtlmBufferReaderTest, ReadSecurityBuffer) { |
| 87 const uint8_t buf[8] = {0x22, 0x11, 0xFF, 0xEE, 0x88, 0x77, 0x66, 0x55}; |
| 88 const uint16_t length = 0x1122; |
| 89 const uint32_t offset = 0x55667788; |
| 90 |
| 91 NtlmBufferReader reader(buf, arraysize(buf)); |
| 92 |
| 93 ntlm::SecurityBuffer sec_buf; |
| 94 EXPECT_TRUE(reader.ReadSecurityBuffer(&sec_buf)); |
| 95 EXPECT_EQ(length, sec_buf.length); |
| 96 EXPECT_EQ(offset, sec_buf.offset); |
| 97 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 98 EXPECT_FALSE(reader.ReadSecurityBuffer(&sec_buf)); |
| 99 } |
| 100 |
| 101 TEST(NtlmBufferReaderTest, ReadSecurityBufferPastEob) { |
| 102 const uint8_t buf[7] = {0}; |
| 103 NtlmBufferReader reader(buf, arraysize(buf)); |
| 104 |
| 105 ntlm::SecurityBuffer sec_buf; |
| 106 EXPECT_FALSE(reader.ReadSecurityBuffer(&sec_buf)); |
| 107 } |
| 108 |
| 109 TEST(NtlmBufferReaderTest, ReadAsciiString) { |
| 110 const uint8_t buf[8] = {'1', '2', '3', '4', '5', '6', '7', '8'}; |
| 111 const std::string expected("12345678"); |
| 112 |
| 113 NtlmBufferReader reader(buf, arraysize(buf)); |
| 114 |
| 115 std::string actual; |
| 116 EXPECT_TRUE(reader.ReadUtf8String(&actual, expected.size())); |
| 117 EXPECT_EQ(expected, actual); |
| 118 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 119 EXPECT_FALSE(reader.ReadUtf8String(&actual, expected.size())); |
| 120 } |
| 121 |
| 122 TEST(NtlmBufferReaderTest, ReadAsciiStringPastEob) { |
| 123 const size_t len = 8; |
| 124 const uint8_t buf[len] = {0}; |
| 125 |
| 126 NtlmBufferReader reader(buf, arraysize(buf)); |
| 127 |
| 128 std::string actual; |
| 129 EXPECT_FALSE(reader.ReadUtf8String(&actual, len + 1)); |
| 130 } |
| 131 |
| 132 TEST(NtlmBufferReaderTest, ReadUnicodeString) { |
| 133 const uint8_t buf[16] = { |
| 134 '1', 0, '2', 0, '3', 0, '4', 0, '5', 0, '6', 0, '7', 0, '8', 0, |
| 135 }; |
| 136 const base::string16 expected = base::ASCIIToUTF16("12345678"); |
| 137 |
| 138 NtlmBufferReader reader(buf, arraysize(buf)); |
| 139 |
| 140 base::string16 actual; |
| 141 EXPECT_TRUE(reader.ReadUtf16String(&actual, expected.size() * 2)); |
| 142 EXPECT_EQ(expected, actual); |
| 143 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 144 EXPECT_FALSE(reader.ReadUtf16String(&actual, expected.size() * 2)); |
| 145 } |
| 146 |
| 147 TEST(NtlmBufferReaderTest, ReadUnicodeStringPastEob) { |
| 148 const size_t len = 8; |
| 149 const uint8_t buf[len] = {0}; |
| 150 |
| 151 NtlmBufferReader reader(buf, arraysize(buf)); |
| 152 |
| 153 // Try to read one more character (2 bytes) than there is space. |
| 154 base::string16 actual; |
| 155 EXPECT_FALSE(reader.ReadUtf16String(&actual, len + 2)); |
| 156 EXPECT_EQ(0u, reader.GetCursor()); |
| 157 } |
| 158 |
| 159 TEST(NtlmBufferReaderTest, ReadUtf16StringOddLength) { |
| 160 const size_t len = 8; |
| 161 const uint8_t buf[len] = {0}; |
| 162 |
| 163 NtlmBufferReader reader(buf, arraysize(buf)); |
| 164 |
| 165 // Try to read a 16-bit string with a length that isn't a multiple |
| 166 // of 2. |
| 167 base::string16 actual; |
| 168 EXPECT_FALSE(reader.ReadUtf16String(&actual, len - 1)); |
| 169 EXPECT_EQ(0u, reader.GetCursor()); |
| 170 } |
| 171 |
| 172 TEST(NtlmBufferReaderTest, ReadUtf8Payload) { |
| 173 const std::string expected("12345678"); |
| 174 const size_t len = expected.length(); |
| 175 |
| 176 const uint8_t buf[16] = { |
| 177 len, 0, len, 0, ntlm::SECURITY_BUFFER_LEN, 0, 0, 0, '1', '2', '3', '4', |
| 178 '5', '6', '7', '8'}; |
| 179 |
| 180 NtlmBufferReader reader(buf, arraysize(buf)); |
| 181 |
| 182 std::string actual; |
| 183 EXPECT_TRUE(reader.ReadUtf8Payload(&actual)); |
| 184 EXPECT_EQ(expected, actual); |
| 185 // Read payload only advances the cursor over the security buffer. |
| 186 EXPECT_EQ(ntlm::SECURITY_BUFFER_LEN, reader.GetCursor()); |
| 187 } |
| 188 |
| 189 TEST(NtlmBufferReaderTest, ReadUtf16Payload) { |
| 190 const base::string16 expected = base::ASCIIToUTF16("12345678"); |
| 191 const size_t len = expected.length() * 2; |
| 192 const uint8_t buf[24] = {len, 0, len, 0, ntlm::SECURITY_BUFFER_LEN, |
| 193 0, 0, 0, '1', 0, |
| 194 '2', 0, '3', 0, '4', |
| 195 0, '5', 0, '6', 0, |
| 196 '7', 0, '8', 0}; |
| 197 |
| 198 NtlmBufferReader reader(buf, arraysize(buf)); |
| 199 |
| 200 base::string16 actual; |
| 201 EXPECT_TRUE(reader.ReadUtf16Payload(&actual)); |
| 202 EXPECT_EQ(expected, actual); |
| 203 // Read payload only advances the cursor over the security buffer. |
| 204 EXPECT_EQ(ntlm::SECURITY_BUFFER_LEN, reader.GetCursor()); |
| 205 } |
| 206 |
| 207 TEST(NtlmBufferReaderTest, SkipSecurityBuffer) { |
| 208 const uint8_t buf[ntlm::SECURITY_BUFFER_LEN] = {0}; |
| 209 |
| 210 NtlmBufferReader reader(buf, arraysize(buf)); |
| 211 EXPECT_TRUE(reader.SkipSecurityBuffer()); |
| 212 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 213 EXPECT_FALSE(reader.SkipSecurityBuffer()); |
| 214 } |
| 215 |
| 216 TEST(NtlmBufferReaderTest, SkipSecurityBufferPastEob) { |
| 217 // The buffer is one byte shorter than security buffer. |
| 218 const uint8_t buf[ntlm::SECURITY_BUFFER_LEN - 1] = {0}; |
| 219 |
| 220 NtlmBufferReader reader(buf, arraysize(buf)); |
| 221 EXPECT_FALSE(reader.SkipSecurityBuffer()); |
| 222 EXPECT_EQ(0u, reader.GetCursor()); |
| 223 } |
| 224 |
| 225 TEST(NtlmBufferReaderTest, SkipSecurityBufferWithValidationEmpty) { |
| 226 const uint8_t buf[ntlm::SECURITY_BUFFER_LEN] = {0, 0, 0, 0, 0, 0, 0, 0}; |
| 227 |
| 228 NtlmBufferReader reader(buf, arraysize(buf)); |
| 229 EXPECT_TRUE(reader.SkipSecurityBufferWithValidation()); |
| 230 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 231 EXPECT_FALSE(reader.SkipSecurityBufferWithValidation()); |
| 232 } |
| 233 |
| 234 TEST(NtlmBufferReaderTest, SkipSecurityBufferWithValidationValid) { |
| 235 // A valid security buffer that points to the 1 payload byte. |
| 236 const uint8_t buf[ntlm::SECURITY_BUFFER_LEN + 1] = { |
| 237 0x01, 0, 0x01, 0, ntlm::SECURITY_BUFFER_LEN, 0, 0, 0, 0xFF}; |
| 238 |
| 239 NtlmBufferReader reader(buf, arraysize(buf)); |
| 240 EXPECT_TRUE(reader.SkipSecurityBufferWithValidation()); |
| 241 EXPECT_EQ(ntlm::SECURITY_BUFFER_LEN, reader.GetCursor()); |
| 242 EXPECT_FALSE(reader.SkipSecurityBufferWithValidation()); |
| 243 } |
| 244 |
| 245 TEST(NtlmBufferReaderTest, |
| 246 SkipSecurityBufferWithValidationPayloadLengthPastEob) { |
| 247 // Security buffer with length that points past the end of buffer. |
| 248 const uint8_t buf[ntlm::SECURITY_BUFFER_LEN + 1] = { |
| 249 0x02, 0, 0x02, 0, ntlm::SECURITY_BUFFER_LEN, 0, 0, 0, 0xFF}; |
| 250 |
| 251 NtlmBufferReader reader(buf, arraysize(buf)); |
| 252 EXPECT_FALSE(reader.SkipSecurityBufferWithValidation()); |
| 253 EXPECT_EQ(0u, reader.GetCursor()); |
| 254 } |
| 255 |
| 256 TEST(NtlmBufferReaderTest, |
| 257 SkipSecurityBufferWithValidationPayloadOffsetPastEob) { |
| 258 // Security buffer with offset that points past the end of buffer. |
| 259 const uint8_t buf[ntlm::SECURITY_BUFFER_LEN + 1] = { |
| 260 0x02, 0, 0x02, 0, ntlm::SECURITY_BUFFER_LEN + 1, 0, 0, 0, 0xFF}; |
| 261 |
| 262 NtlmBufferReader reader(buf, arraysize(buf)); |
| 263 EXPECT_FALSE(reader.SkipSecurityBufferWithValidation()); |
| 264 EXPECT_EQ(0u, reader.GetCursor()); |
| 265 } |
| 266 |
| 267 TEST(NtlmBufferReaderTest, |
| 268 SkipSecurityBufferWithValidationZeroLengthPayloadOffsetPastEob) { |
| 269 // Security buffer with offset that points past the end of buffer but |
| 270 // length is 0. |
| 271 const uint8_t buf[ntlm::SECURITY_BUFFER_LEN] = { |
| 272 0, 0, 0, 0, ntlm::SECURITY_BUFFER_LEN + 1, 0, 0, 0}; |
| 273 |
| 274 NtlmBufferReader reader(buf, arraysize(buf)); |
| 275 EXPECT_TRUE(reader.SkipSecurityBufferWithValidation()); |
| 276 EXPECT_EQ(ntlm::SECURITY_BUFFER_LEN, reader.GetCursor()); |
| 277 } |
| 278 |
| 279 TEST(NtlmBufferReaderTest, SkipBytes) { |
| 280 const uint8_t buf[8] = {0}; |
| 281 |
| 282 NtlmBufferReader reader(buf, arraysize(buf)); |
| 283 |
| 284 EXPECT_TRUE(reader.SkipBytes(arraysize(buf))); |
| 285 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 286 EXPECT_FALSE(reader.SkipBytes(arraysize(buf))); |
| 287 } |
| 288 |
| 289 TEST(NtlmBufferReaderTest, SkipBytesPastEob) { |
| 290 const uint8_t buf[8] = {0}; |
| 291 |
| 292 NtlmBufferReader reader(buf, arraysize(buf)); |
| 293 |
| 294 EXPECT_FALSE(reader.SkipBytes(arraysize(buf) + 1)); |
| 295 EXPECT_EQ(0u, reader.GetCursor()); |
| 296 } |
| 297 |
| 298 TEST(NtlmBufferReaderTest, MatchSignatureTooShort) { |
| 299 const uint8_t buf[7] = {0}; |
| 300 |
| 301 NtlmBufferReader reader(buf, arraysize(buf)); |
| 302 |
| 303 EXPECT_TRUE(reader.CanRead(7)); |
| 304 EXPECT_FALSE(reader.MatchSignature()); |
| 305 EXPECT_EQ(0u, reader.GetCursor()); |
| 306 EXPECT_TRUE(reader.CanRead(7)); |
| 307 } |
| 308 |
| 309 TEST(NtlmBufferReaderTest, MatchSignatureNoMatch) { |
| 310 // The last byte should be a 0. |
| 311 const uint8_t buf[8] = {'N', 'T', 'L', 'M', 'S', 'S', 'P', 0xff}; |
| 312 NtlmBufferReader reader(buf, arraysize(buf)); |
| 313 |
| 314 EXPECT_TRUE(reader.CanRead(8)); |
| 315 EXPECT_FALSE(reader.MatchSignature()); |
| 316 EXPECT_EQ(0u, reader.GetCursor()); |
| 317 EXPECT_TRUE(reader.CanRead(8)); |
| 318 } |
| 319 |
| 320 TEST(NtlmBufferReaderTest, MatchSignatureOk) { |
| 321 const uint8_t buf[8] = {'N', 'T', 'L', 'M', 'S', 'S', 'P', 0}; |
| 322 NtlmBufferReader reader(buf, arraysize(buf)); |
| 323 |
| 324 EXPECT_TRUE(reader.MatchSignature()); |
| 325 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 326 } |
| 327 |
| 328 TEST(NtlmBufferReaderTest, ReadInvalidMessageType) { |
| 329 // Only 0x01, 0x02, and 0x03 are valid message types. |
| 330 const uint8_t buf[4] = {0x04, 0, 0, 0}; |
| 331 NtlmBufferReader reader(buf, arraysize(buf)); |
| 332 |
| 333 ntlm::MessageType message_type; |
| 334 EXPECT_FALSE(reader.ReadMessageType(&message_type)); |
| 335 EXPECT_FALSE(reader.IsEndOfBuffer()); |
| 336 EXPECT_TRUE(reader.CanRead(4)); |
| 337 } |
| 338 |
| 339 TEST(NtlmBufferReaderTest, ReadMessageTypeNegotiate) { |
| 340 const uint8_t buf[4] = {static_cast<uint8_t>(ntlm::MessageType::NEGOTIATE), 0, |
| 341 0, 0}; |
| 342 NtlmBufferReader reader(buf, arraysize(buf)); |
| 343 |
| 344 ntlm::MessageType message_type; |
| 345 EXPECT_TRUE(reader.ReadMessageType(&message_type)); |
| 346 EXPECT_EQ(ntlm::MessageType::NEGOTIATE, message_type); |
| 347 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 348 } |
| 349 |
| 350 TEST(NtlmBufferReaderTest, ReadMessageTypeChallenge) { |
| 351 const uint8_t buf[4] = {static_cast<uint8_t>(ntlm::MessageType::CHALLENGE), 0, |
| 352 0, 0}; |
| 353 NtlmBufferReader reader(buf, arraysize(buf)); |
| 354 |
| 355 ntlm::MessageType message_type; |
| 356 EXPECT_TRUE(reader.ReadMessageType(&message_type)); |
| 357 EXPECT_EQ(ntlm::MessageType::CHALLENGE, message_type); |
| 358 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 359 } |
| 360 |
| 361 TEST(NtlmBufferReaderTest, ReadMessageTypeAuthenticate) { |
| 362 const uint8_t buf[4] = {static_cast<uint8_t>(ntlm::MessageType::AUTHENTICATE), |
| 363 0, 0, 0}; |
| 364 NtlmBufferReader reader(buf, arraysize(buf)); |
| 365 |
| 366 ntlm::MessageType message_type; |
| 367 EXPECT_TRUE(reader.ReadMessageType(&message_type)); |
| 368 EXPECT_EQ(ntlm::MessageType::AUTHENTICATE, message_type); |
| 369 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 370 } |
| 371 |
| 372 TEST(NtlmBufferReaderTest, MatchMessageTypeAuthenticate) { |
| 373 const uint8_t buf[4] = {static_cast<uint8_t>(ntlm::MessageType::AUTHENTICATE), |
| 374 0, 0, 0}; |
| 375 NtlmBufferReader reader(buf, arraysize(buf)); |
| 376 |
| 377 EXPECT_TRUE(reader.MatchMessageType(ntlm::MessageType::AUTHENTICATE)); |
| 378 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 379 } |
| 380 |
| 381 TEST(NtlmBufferReaderTest, MatchMessageTypeInvalid) { |
| 382 // Only 0x01, 0x02, and 0x03 are valid message types. |
| 383 const uint8_t buf[4] = {0x04, 0, 0, 0}; |
| 384 NtlmBufferReader reader(buf, arraysize(buf)); |
| 385 |
| 386 EXPECT_FALSE(reader.MatchMessageType(ntlm::MessageType::AUTHENTICATE)); |
| 387 EXPECT_EQ(0u, reader.GetCursor()); |
| 388 } |
| 389 |
| 390 TEST(NtlmBufferReaderTest, MatchMessageTypeMismatch) { |
| 391 const uint8_t buf[4] = {static_cast<uint8_t>(ntlm::MessageType::CHALLENGE), 0, |
| 392 0, 0}; |
| 393 NtlmBufferReader reader(buf, arraysize(buf)); |
| 394 |
| 395 EXPECT_FALSE(reader.MatchMessageType(ntlm::MessageType::AUTHENTICATE)); |
| 396 EXPECT_EQ(0u, reader.GetCursor()); |
| 397 } |
| 398 |
| 399 TEST(NtlmBufferReaderTest, MatchAuthenticateHeader) { |
| 400 const uint8_t buf[12] = { |
| 401 'N', 'T', 'L', |
| 402 'M', 'S', 'S', |
| 403 'P', 0, static_cast<uint8_t>(ntlm::MessageType::AUTHENTICATE), |
| 404 0, 0, 0}; |
| 405 NtlmBufferReader reader(buf, arraysize(buf)); |
| 406 |
| 407 EXPECT_TRUE(reader.MatchMessageHeader(ntlm::MessageType::AUTHENTICATE)); |
| 408 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 409 } |
| 410 |
| 411 TEST(NtlmBufferReaderTest, MatchAuthenticateHeaderMisMatch) { |
| 412 const uint8_t buf[12] = { |
| 413 'N', 'T', 'L', |
| 414 'M', 'S', 'S', |
| 415 'P', 0, static_cast<uint8_t>(ntlm::MessageType::CHALLENGE), |
| 416 0, 0, 0}; |
| 417 NtlmBufferReader reader(buf, arraysize(buf)); |
| 418 |
| 419 EXPECT_FALSE(reader.MatchMessageType(ntlm::MessageType::AUTHENTICATE)); |
| 420 EXPECT_EQ(0u, reader.GetCursor()); |
| 421 } |
| 422 |
| 423 TEST(NtlmBufferReaderTest, MatchZeros) { |
| 424 const uint8_t buf[6] = {0, 0, 0, 0, 0, 0}; |
| 425 |
| 426 NtlmBufferReader reader(buf, arraysize(buf)); |
| 427 |
| 428 EXPECT_TRUE(reader.MatchZeros(arraysize(buf))); |
| 429 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 430 EXPECT_FALSE(reader.MatchZeros(1)); |
| 431 } |
| 432 |
| 433 TEST(NtlmBufferReaderTest, MatchZerosFail) { |
| 434 const uint8_t buf[6] = {0, 0, 0, 0, 0, 0xFF}; |
| 435 |
| 436 NtlmBufferReader reader(buf, arraysize(buf)); |
| 437 |
| 438 EXPECT_FALSE(reader.MatchZeros(arraysize(buf))); |
| 439 EXPECT_EQ(0u, reader.GetCursor()); |
| 440 } |
| 441 |
| 442 TEST(NtlmBufferReaderTest, MatchEmptySecurityBuffer) { |
| 443 const uint8_t buf[ntlm::SECURITY_BUFFER_LEN] = {0, 0, 0, 0, 0, 0, 0, 0}; |
| 444 |
| 445 NtlmBufferReader reader(buf, ntlm::SECURITY_BUFFER_LEN); |
| 446 |
| 447 EXPECT_TRUE(reader.MatchEmptySecurityBuffer()); |
| 448 EXPECT_TRUE(reader.IsEndOfBuffer()); |
| 449 EXPECT_FALSE(reader.MatchEmptySecurityBuffer()); |
| 450 } |
| 451 |
| 452 TEST(NtlmBufferReaderTest, MatchEmptySecurityBufferFail) { |
| 453 const uint8_t buf[ntlm::SECURITY_BUFFER_LEN] = {0, 0, 0, 0, 0, 0, 0, 0x01}; |
| 454 |
| 455 NtlmBufferReader reader(buf, ntlm::SECURITY_BUFFER_LEN); |
| 456 |
| 457 EXPECT_FALSE(reader.MatchEmptySecurityBuffer()); |
| 458 EXPECT_EQ(0u, reader.GetCursor()); |
| 459 } |
| 460 |
| 461 } // namespace net |
OLD | NEW |