Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(159)

Unified Diff: net/http/ntlm_buffer_reader_unittest.cc

Issue 2879353002: Add a buffer reader/writer for NTLM. (Closed)
Patch Set: Add a buffer reader/writer for NTLM. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/http/ntlm_buffer_reader_unittest.cc
diff --git a/net/http/ntlm_buffer_reader_unittest.cc b/net/http/ntlm_buffer_reader_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..5027d7e9e597f8265aa87e04ef737d3cf33ce824
--- /dev/null
+++ b/net/http/ntlm_buffer_reader_unittest.cc
@@ -0,0 +1,535 @@
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/http/ntlm_buffer_reader.h"
+
+#include "base/macros.h"
+#include "net/http/ntlm.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace net {
+
+TEST(NtlmBufferReaderTest, Initialization) {
+ uint8_t buf[1];
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ EXPECT_EQ(arraysize(buf), reader.GetLength());
+ EXPECT_EQ(0u, reader.GetCursor());
+ EXPECT_FALSE(reader.IsEndOfBuffer());
+ EXPECT_TRUE(reader.CanRead(1));
+ EXPECT_FALSE(reader.CanRead(2));
+ EXPECT_TRUE(reader.CanReadFrom(0, 1));
+ EXPECT_TRUE(reader.CanReadFrom(ntlm::SecurityBuffer(0, 1)));
+ EXPECT_FALSE(reader.CanReadFrom(1, 1));
+ EXPECT_FALSE(reader.CanReadFrom(ntlm::SecurityBuffer(1, 1)));
+ EXPECT_FALSE(reader.CanReadFrom(0, 2));
+ EXPECT_FALSE(reader.CanReadFrom(ntlm::SecurityBuffer(0, 2)));
+}
+
+TEST(NtlmBufferReaderTest, Read16) {
+ uint8_t buf[2];
+ const uint16_t expected = 0x1122;
+ // Little endian.
+ buf[0] = expected & 0xff;
asanka 2017/06/08 19:40:09 Nit: it seems easier to read buf[] was initialized
zentaro 2017/06/12 23:12:06 Done.
+ buf[1] = expected >> 8;
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ uint16_t actual;
+ EXPECT_TRUE(reader.ReadUInt16(&actual));
+ EXPECT_EQ(expected, actual);
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+ EXPECT_FALSE(reader.ReadUInt16(&actual));
+}
+
+TEST(NtlmBufferReaderTest, Read32) {
+ uint8_t buf[4];
+ const uint32_t expected = 0x11223344;
+ // Little endian.
+ buf[0] = expected & 0xff;
+ buf[1] = (expected & 0xff00) >> 8;
+ buf[2] = (expected & 0xff0000) >> 16;
+ buf[3] = (expected & 0xff000000) >> 24;
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ uint32_t actual;
+ EXPECT_TRUE(reader.ReadUInt32(&actual));
+ EXPECT_EQ(expected, actual);
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+ EXPECT_FALSE(reader.ReadUInt32(&actual));
+}
+
+TEST(NtlmBufferReaderTest, Read64) {
+ uint8_t buf[8];
+ const uint64_t expected = 0x1122334455667788;
+ // Little endian.
+ buf[0] = expected & 0xff;
+ buf[1] = (expected & 0xff00) >> 8;
+ buf[2] = (expected & 0xff0000) >> 16;
+ buf[3] = (expected & 0xff000000) >> 24;
+ buf[4] = (expected & 0xff00000000) >> 32;
+ buf[5] = (expected & 0xff0000000000) >> 40;
+ buf[6] = (expected & 0xff000000000000) >> 48;
+ buf[7] = expected >> 56;
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ uint64_t actual;
+ EXPECT_TRUE(reader.ReadUInt64(&actual));
+ EXPECT_EQ(expected, actual);
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+ EXPECT_FALSE(reader.ReadUInt64(&actual));
+}
+
+TEST(NtlmBufferReaderTest, ReadBytes) {
+ uint8_t expected[8];
+ uint8_t actual[8];
+
+ expected[0] = 0x11;
+ expected[1] = 0x22;
+ expected[2] = 0x33;
+ expected[3] = 0x44;
+ expected[4] = 0x55;
+ expected[5] = 0x66;
+ expected[6] = 0x77;
+ expected[7] = 0x88;
+
+ NtlmBufferReader reader(expected, arraysize(expected));
+
+ EXPECT_TRUE(reader.ReadBytes(actual, arraysize(actual)));
+ EXPECT_EQ(0, memcmp(actual, expected, arraysize(actual)));
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+ EXPECT_FALSE(reader.ReadBytes(actual, 1));
+}
+
+TEST(NtlmBufferReaderTest, ReadSecurityBuffer) {
+ uint8_t buf[8];
+ uint16_t length = 0x1122;
+ uint16_t allocated = 0x3344;
+ uint32_t offset = 0x55667788;
+
+ buf[0] = length & 0xff;
+ buf[1] = length >> 8;
+ buf[2] = allocated & 0xff;
+ buf[3] = allocated >> 8;
+ buf[4] = offset & 0xff;
+ buf[5] = (offset & 0xff00) >> 8;
+ buf[6] = (offset & 0xff0000) >> 16;
+ buf[7] = (offset & 0xff000000) >> 24;
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ ntlm::SecurityBuffer sec_buf;
+ EXPECT_TRUE(reader.ReadSecurityBuffer(&sec_buf));
+ EXPECT_EQ(length, sec_buf.length);
+ EXPECT_EQ(offset, sec_buf.offset);
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+ EXPECT_FALSE(reader.ReadSecurityBuffer(&sec_buf));
+}
+
+TEST(NtlmBufferReaderTest, ReadSecurityBufferPastEob) {
+ uint8_t buf[7];
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ ntlm::SecurityBuffer sec_buf;
+ EXPECT_FALSE(reader.ReadSecurityBuffer(&sec_buf));
asanka 2017/06/08 19:40:09 Check cursor for failing Read* calls? Here and els
zentaro 2017/06/12 23:12:06 Done.
+}
+
+TEST(NtlmBufferReaderTest, ReadAsciiString) {
+ uint8_t buf[8];
+ std::string expected("12345678");
+ memcpy(buf, expected.c_str(), expected.size());
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ std::string actual;
+ EXPECT_TRUE(reader.ReadAsciiString(&actual, expected.size()));
+ EXPECT_EQ(expected, actual);
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+ EXPECT_FALSE(reader.ReadAsciiString(&actual, expected.size()));
+}
+
+TEST(NtlmBufferReaderTest, ReadAsciiStringPastEob) {
+ const size_t len = 8;
+ uint8_t buf[len];
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ std::string actual;
+ EXPECT_FALSE(reader.ReadAsciiString(&actual, len + 1));
+}
+
+TEST(NtlmBufferReaderTest, ReadUnicodeString) {
+ uint8_t buf[16];
+ std::string expected_ascii("12345678");
+ base::string16 expected;
+ expected.assign(expected_ascii.begin(), expected_ascii.end());
asanka 2017/06/08 19:40:09 This test assumes that string16 encodes in UTF-16L
zentaro 2017/06/12 23:12:07 Done.
+ memcpy(buf, expected.c_str(), expected.size() * 2);
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ base::string16 actual;
+ EXPECT_TRUE(reader.ReadUnicodeString(&actual, expected.size() * 2));
+ EXPECT_EQ(expected, actual);
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+ EXPECT_FALSE(reader.ReadUnicodeString(&actual, expected.size() * 2));
+}
asanka 2017/06/08 19:41:52 For UnicodeString reads and writes, let's add some
+
+TEST(NtlmBufferReaderTest, ReadUnicodeStringPastEob) {
+ const size_t len = 8;
+ uint8_t buf[len];
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ // Try to read one more character (2 bytes) than there is space.
+ base::string16 actual;
+ EXPECT_FALSE(reader.ReadUnicodeString(&actual, len + 2));
+}
+
+TEST(NtlmBufferReaderTest, ReadUnicodeStringOddLength) {
+ const size_t len = 8;
+ uint8_t buf[len];
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ // Try to read a 16-bit string with a length that isn't a multiple
+ // of 2.
+ base::string16 actual;
+ EXPECT_FALSE(reader.ReadUnicodeString(&actual, len - 1));
+}
+
+TEST(NtlmBufferReaderTest, ReadAsciiPayload) {
+ uint8_t buf[24];
+
+ std::string expected("12345678");
+
+ // Write a security buffer at the start.
+ memset(buf, 0, ntlm::SECURITY_BUFFER_LEN);
+ buf[0] = expected.length();
+ buf[2] = expected.length();
+ buf[4] = ntlm::SECURITY_BUFFER_LEN;
+
+ // Put the string after the security buffer.
+ memcpy(buf + ntlm::SECURITY_BUFFER_LEN, expected.c_str(),
+ expected.size() * 2);
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ std::string actual;
+ EXPECT_TRUE(reader.ReadAsciiPayload(&actual));
+ EXPECT_EQ(expected, actual);
+ // Read payload only advances the cursor over the security buffer.
+ EXPECT_EQ(ntlm::SECURITY_BUFFER_LEN, reader.GetCursor());
+}
+
+TEST(NtlmBufferReaderTest, ReadUnicodePayload) {
+ uint8_t buf[24];
+
+ std::string expected_ascii("12345678");
+ base::string16 expected;
+ expected.assign(expected_ascii.begin(), expected_ascii.end());
+
+ // Write a security buffer at the start.
+ memset(buf, 0, ntlm::SECURITY_BUFFER_LEN);
asanka 2017/06/08 19:40:09 Yup. Definitely initialize buf directly.
zentaro 2017/06/12 23:12:07 Done.
+ buf[0] = expected_ascii.length() * 2;
+ buf[2] = expected_ascii.length() * 2;
+ buf[4] = ntlm::SECURITY_BUFFER_LEN;
+
+ // Put the string after the security buffer.
+ memcpy(buf + 8, expected.c_str(), expected.size() * 2);
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ base::string16 actual;
+ EXPECT_TRUE(reader.ReadUnicodePayload(&actual));
+ EXPECT_EQ(expected, actual);
+ // Read payload only advances the cursor over the security buffer.
+ EXPECT_EQ(ntlm::SECURITY_BUFFER_LEN, reader.GetCursor());
+}
+
+TEST(NtlmBufferReaderTest, SkipSecurityBuffer) {
+ uint8_t buf[ntlm::SECURITY_BUFFER_LEN];
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+ EXPECT_TRUE(reader.SkipSecurityBuffer());
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+ EXPECT_FALSE(reader.SkipSecurityBuffer());
+}
+
+TEST(NtlmBufferReaderTest, SkipSecurityBufferPastEob) {
+ uint8_t buf[ntlm::SECURITY_BUFFER_LEN - 1];
+
+ // The buffer is one byte shorter than security buffer.
+ NtlmBufferReader reader(buf, arraysize(buf));
+ EXPECT_FALSE(reader.SkipSecurityBuffer());
+ EXPECT_EQ(0u, reader.GetCursor());
+}
+
+TEST(NtlmBufferReaderTest, SkipSecurityBufferWithValidationEmpty) {
asanka 2017/06/08 19:40:09 We are permissive about buffers with a length of z
zentaro 2017/06/12 23:12:06 Yes. Added explicit test.
+ uint8_t buf[ntlm::SECURITY_BUFFER_LEN];
+
+ memset(buf, 0, ntlm::SECURITY_BUFFER_LEN);
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+ EXPECT_TRUE(reader.SkipSecurityBufferWithValidation());
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+ EXPECT_FALSE(reader.SkipSecurityBufferWithValidation());
+}
+
+TEST(NtlmBufferReaderTest, SkipSecurityBufferWithValidationValid) {
+ uint8_t buf[ntlm::SECURITY_BUFFER_LEN + 1];
+
+ // Write a valid security buffer that points to the 1 payload byte.
+ memset(buf, 0, ntlm::SECURITY_BUFFER_LEN);
+ buf[0] = 1;
+ buf[2] = 1;
+ buf[4] = ntlm::SECURITY_BUFFER_LEN;
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+ EXPECT_TRUE(reader.SkipSecurityBufferWithValidation());
+ EXPECT_EQ(ntlm::SECURITY_BUFFER_LEN, reader.GetCursor());
+ EXPECT_FALSE(reader.SkipSecurityBufferWithValidation());
+}
+
+TEST(NtlmBufferReaderTest,
+ SkipSecurityBufferWithValidationPayloadLengthPastEob) {
+ uint8_t buf[ntlm::SECURITY_BUFFER_LEN + 1];
+
+ // Security buffer with length that points past the end of buffer.
+ memset(buf, 0, ntlm::SECURITY_BUFFER_LEN);
+ buf[0] = 2;
+ buf[2] = 2;
+ buf[4] = ntlm::SECURITY_BUFFER_LEN;
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+ EXPECT_FALSE(reader.SkipSecurityBufferWithValidation());
+ EXPECT_EQ(0u, reader.GetCursor());
+ EXPECT_FALSE(reader.SkipSecurityBufferWithValidation());
+}
+
+TEST(NtlmBufferReaderTest,
+ SkipSecurityBufferWithValidationPayloadOffsetPastEob) {
+ uint8_t buf[ntlm::SECURITY_BUFFER_LEN + 1];
+
+ // Security buffer with offset that points past the end of buffer.
+ memset(buf, 0, ntlm::SECURITY_BUFFER_LEN);
+ buf[0] = 1;
+ buf[2] = 1;
+ buf[4] = ntlm::SECURITY_BUFFER_LEN + 1;
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+ EXPECT_FALSE(reader.SkipSecurityBufferWithValidation());
+ EXPECT_EQ(0u, reader.GetCursor());
+}
+
+TEST(NtlmBufferReaderTest, SkipBytes) {
+ uint8_t buf[8];
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ EXPECT_TRUE(reader.SkipBytes(arraysize(buf)));
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+ EXPECT_FALSE(reader.SkipBytes(arraysize(buf)));
+}
+
+TEST(NtlmBufferReaderTest, SkipBytesPastEob) {
+ uint8_t buf[8];
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ EXPECT_FALSE(reader.SkipBytes(arraysize(buf) + 1));
+ EXPECT_EQ(0u, reader.GetCursor());
+}
+
+TEST(NtlmBufferReaderTest, MatchSignatureTooShort) {
+ uint8_t buf[7];
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ EXPECT_TRUE(reader.CanRead(7));
+ EXPECT_FALSE(reader.MatchSignature());
+ EXPECT_TRUE(reader.CanRead(7));
+}
+
+TEST(NtlmBufferReaderTest, MatchSignatureNoMatch) {
+ uint8_t buf[8];
+ memset(buf, 0, arraysize(buf));
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ EXPECT_TRUE(reader.CanRead(8));
+ EXPECT_FALSE(reader.MatchSignature());
+ EXPECT_TRUE(reader.CanRead(8));
+}
+
+TEST(NtlmBufferReaderTest, MatchSignatureOk) {
+ uint8_t buf[8];
+ memcpy(buf, ntlm::SIGNATURE, ntlm::SIGNATURE_LEN);
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ EXPECT_TRUE(reader.MatchSignature());
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+}
+
+TEST(NtlmBufferReaderTest, ReadInvalidMessageType) {
+ uint8_t buf[4];
+ memset(buf, 0, arraysize(buf));
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ ntlm::MessageType message_type;
+ EXPECT_FALSE(reader.ReadMessageType(&message_type));
+ EXPECT_FALSE(reader.IsEndOfBuffer());
+ EXPECT_TRUE(reader.CanRead(4));
+}
+
+TEST(NtlmBufferReaderTest, ReadMessageTypeNegotiate) {
+ uint8_t buf[4];
+ memset(buf, 0, arraysize(buf));
+ buf[0] = static_cast<uint8_t>(ntlm::MESSAGE_NEGOTIATE);
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ ntlm::MessageType message_type;
+ EXPECT_TRUE(reader.ReadMessageType(&message_type));
+ EXPECT_EQ(ntlm::MESSAGE_NEGOTIATE, message_type);
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+}
+
+TEST(NtlmBufferReaderTest, ReadMessageTypeChallenge) {
+ uint8_t buf[4];
+ memset(buf, 0, arraysize(buf));
+ buf[0] = static_cast<uint8_t>(ntlm::MESSAGE_CHALLENGE);
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ ntlm::MessageType message_type;
+ EXPECT_TRUE(reader.ReadMessageType(&message_type));
+ EXPECT_EQ(ntlm::MESSAGE_CHALLENGE, message_type);
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+}
+
+TEST(NtlmBufferReaderTest, ReadMessageTypeAuthenticate) {
+ uint8_t buf[4];
+ memset(buf, 0, arraysize(buf));
+ buf[0] = static_cast<uint8_t>(ntlm::MESSAGE_AUTHENTICATE);
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ ntlm::MessageType message_type;
+ EXPECT_TRUE(reader.ReadMessageType(&message_type));
+ EXPECT_EQ(ntlm::MESSAGE_AUTHENTICATE, message_type);
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+}
+
+TEST(NtlmBufferReaderTest, MatchMessageTypeAuthenticate) {
+ uint8_t buf[4];
+ memset(buf, 0, arraysize(buf));
+ buf[0] = static_cast<uint8_t>(ntlm::MESSAGE_AUTHENTICATE);
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ EXPECT_TRUE(reader.MatchMessageType(ntlm::MESSAGE_AUTHENTICATE));
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+}
+
+TEST(NtlmBufferReaderTest, MatchMessageTypeInvalid) {
+ uint8_t buf[4];
+ memset(buf, 0, arraysize(buf));
+ // Invalid message type.
+ buf[0] = 99;
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ EXPECT_FALSE(reader.MatchMessageType(ntlm::MESSAGE_AUTHENTICATE));
+ EXPECT_EQ(0u, reader.GetCursor());
+}
+
+TEST(NtlmBufferReaderTest, MatchMessageTypeMismatch) {
+ uint8_t buf[4];
+ memset(buf, 0, arraysize(buf));
+ buf[0] = static_cast<uint8_t>(ntlm::MESSAGE_CHALLENGE);
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ EXPECT_FALSE(reader.MatchMessageType(ntlm::MESSAGE_AUTHENTICATE));
+ EXPECT_EQ(0u, reader.GetCursor());
+}
+
+TEST(NtlmBufferReaderTest, MatchAuthenticateHeader) {
+ uint8_t buf[12];
+ memset(buf, 0, arraysize(buf));
+ memcpy(buf, ntlm::SIGNATURE, ntlm::SIGNATURE_LEN);
+ buf[8] = static_cast<uint8_t>(ntlm::MESSAGE_AUTHENTICATE);
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ EXPECT_TRUE(reader.MatchMessageHeader(ntlm::MESSAGE_AUTHENTICATE));
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+}
+
+TEST(NtlmBufferReaderTest, MatchAuthenticateHeaderMisMatch) {
+ uint8_t buf[12];
+ memset(buf, 0, arraysize(buf));
+ memcpy(buf, ntlm::SIGNATURE, ntlm::SIGNATURE_LEN);
+ buf[8] = static_cast<uint8_t>(ntlm::MESSAGE_CHALLENGE);
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ EXPECT_FALSE(reader.MatchMessageType(ntlm::MESSAGE_AUTHENTICATE));
+ EXPECT_EQ(0u, reader.GetCursor());
+}
+
+TEST(NtlmBufferReaderTest, MatchFailsRollsBackCursor) {
+ uint8_t buf[12];
+ memset(buf, 0, arraysize(buf));
+ memcpy(buf, ntlm::SIGNATURE, ntlm::SIGNATURE_LEN);
+ buf[8] = 0x04; // Invalid
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ EXPECT_EQ(0u, reader.GetCursor());
+ EXPECT_FALSE(reader.MatchMessageHeader(ntlm::MESSAGE_AUTHENTICATE));
+ EXPECT_EQ(0u, reader.GetCursor());
+ EXPECT_FALSE(reader.IsEndOfBuffer());
+}
+
+TEST(NtlmBufferReaderTest, MatchZeros) {
+ uint8_t buf[12];
+ memset(buf, 0, arraysize(buf));
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ EXPECT_TRUE(reader.MatchZeros(arraysize(buf)));
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+ EXPECT_FALSE(reader.MatchZeros(1));
+}
+
+TEST(NtlmBufferReaderTest, MatchZerosFail) {
+ uint8_t buf[12];
+ memset(buf, 0, arraysize(buf));
+ buf[11] = 0x01;
+
+ NtlmBufferReader reader(buf, arraysize(buf));
+
+ EXPECT_EQ(0u, reader.GetCursor());
+ EXPECT_FALSE(reader.MatchZeros(arraysize(buf)));
+ EXPECT_EQ(0u, reader.GetCursor());
+ EXPECT_FALSE(reader.IsEndOfBuffer());
+}
+
+TEST(NtlmBufferReaderTest, MatchEmptySecurityBuffer) {
+ uint8_t buf[ntlm::SECURITY_BUFFER_LEN];
+ memset(buf, 0, ntlm::SECURITY_BUFFER_LEN);
+
+ NtlmBufferReader reader(buf, ntlm::SECURITY_BUFFER_LEN);
+
+ EXPECT_TRUE(reader.MatchEmptySecurityBuffer());
+ EXPECT_TRUE(reader.IsEndOfBuffer());
+ EXPECT_FALSE(reader.MatchEmptySecurityBuffer());
+}
+
+TEST(NtlmBufferReaderTest, MatchEmptySecurityBufferFail) {
+ uint8_t buf[ntlm::SECURITY_BUFFER_LEN];
+ memset(buf, 0, ntlm::SECURITY_BUFFER_LEN);
+ buf[ntlm::SECURITY_BUFFER_LEN - 1] = 0x01;
+
+ NtlmBufferReader reader(buf, ntlm::SECURITY_BUFFER_LEN);
+
+ EXPECT_EQ(0u, reader.GetCursor());
+ EXPECT_FALSE(reader.MatchEmptySecurityBuffer());
+ EXPECT_EQ(0u, reader.GetCursor());
+}
+
+} // namespace net

Powered by Google App Engine
This is Rietveld 408576698