Index: net/ntlm/ntlm_client_fuzzer.cc |
diff --git a/net/ntlm/ntlm_client_fuzzer.cc b/net/ntlm/ntlm_client_fuzzer.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e937f695b827e7555ab60a1aab765a85524d54d7 |
--- /dev/null |
+++ b/net/ntlm/ntlm_client_fuzzer.cc |
@@ -0,0 +1,43 @@ |
+// Copyright 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 <stddef.h> |
+#include <stdint.h> |
+ |
+#include "base/test/fuzzed_data_provider.h" |
+#include "net/ntlm/ntlm_client.h" |
+#include "net/ntlm/ntlm_test_data.h" |
+ |
+base::string16 ConsumeRandomLengthString16( |
+ base::FuzzedDataProvider& data_provider, |
+ size_t max_chars) { |
+ std::string bytes = data_provider.ConsumeRandomLengthString(max_chars * 2); |
+ return base::string16(reinterpret_cast<const base::char16*>(bytes.data()), |
+ bytes.size() / 2); |
+} |
+ |
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { |
+ net::ntlm::NtlmClient client; |
+ |
+ // Generate the input strings and challenge message. The strings will have a |
+ // maximum length 1 character longer than the maximum that |NtlmClient| will |
+ // accept to allow exploring the error cases. |
+ base::FuzzedDataProvider fdp(data, size); |
+ base::string16 domain = |
+ ConsumeRandomLengthString16(fdp, net::ntlm::kMaxFqdnLen + 1); |
+ base::string16 username = |
+ ConsumeRandomLengthString16(fdp, net::ntlm::kMaxUsernameLen + 1); |
+ base::string16 password = |
+ ConsumeRandomLengthString16(fdp, net::ntlm::kMaxPasswordLen + 1); |
+ std::string hostname = |
+ fdp.ConsumeRandomLengthString(net::ntlm::kMaxFqdnLen + 1); |
+ std::string challenge_msg_bytes = fdp.ConsumeRemainingBytes(); |
+ |
+ client.GenerateAuthenticateMessage( |
+ domain, username, password, hostname, net::ntlm::test::kClientChallenge, |
+ net::ntlm::Buffer( |
+ reinterpret_cast<const uint8_t*>(challenge_msg_bytes.data()), |
+ challenge_msg_bytes.size())); |
+ return 0; |
+} |