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

Side by Side Diff: net/tools/dns_fuzz_stub/dns_fuzz_stub.cc

Issue 1485853003: Revert of Remove kuint16max. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@kint2
Patch Set: Created 5 years 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 unified diff | Download patch
« no previous file with comments | « net/test/spawned_test_server/spawner_communicator.cc ('k') | sandbox/win/src/sandbox_nt_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdint.h>
6
7 #include <algorithm> 5 #include <algorithm>
8 #include <limits>
9 #include <sstream> 6 #include <sstream>
10 #include <string> 7 #include <string>
11 #include <vector> 8 #include <vector>
12 9
10 #include "base/basictypes.h"
13 #include "base/files/file_path.h" 11 #include "base/files/file_path.h"
14 #include "base/files/file_util.h" 12 #include "base/files/file_util.h"
15 #include "base/json/json_reader.h" 13 #include "base/json/json_reader.h"
16 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
17 #include "base/time/time.h" 15 #include "base/time/time.h"
18 #include "base/values.h" 16 #include "base/values.h"
19 #include "net/base/address_list.h" 17 #include "net/base/address_list.h"
20 #include "net/base/io_buffer.h" 18 #include "net/base/io_buffer.h"
21 #include "net/base/ip_endpoint.h" 19 #include "net/base/ip_endpoint.h"
22 #include "net/dns/dns_protocol.h" 20 #include "net/dns/dns_protocol.h"
(...skipping 11 matching lines...) Expand all
34 free(p); 32 free(p);
35 } 33 }
36 34
37 void CrashNullPointerDereference(void) { 35 void CrashNullPointerDereference(void) {
38 // Cause the program to segfault with a NULL pointer dereference 36 // Cause the program to segfault with a NULL pointer dereference
39 int *p = NULL; 37 int *p = NULL;
40 *p = 0; 38 *p = 0;
41 } 39 }
42 40
43 bool FitsUint8(int num) { 41 bool FitsUint8(int num) {
44 return (num >= 0) && (num <= std::numeric_limits<uint8_t>::max()); 42 return (num >= 0) && (num <= kuint8max);
45 } 43 }
46 44
47 bool FitsUint16(int num) { 45 bool FitsUint16(int num) {
48 return (num >= 0) && (num <= std::numeric_limits<uint16_t>::max()); 46 return (num >= 0) && (num <= kuint16max);
49 } 47 }
50 48
51 bool ReadTestCase(const char* filename, 49 bool ReadTestCase(const char* filename,
52 uint16_t* id, 50 uint16* id, std::string* qname, uint16* qtype,
53 std::string* qname,
54 uint16_t* qtype,
55 std::vector<char>* resp_buf, 51 std::vector<char>* resp_buf,
56 bool* crash_test) { 52 bool* crash_test) {
57 base::FilePath filepath = base::FilePath::FromUTF8Unsafe(filename); 53 base::FilePath filepath = base::FilePath::FromUTF8Unsafe(filename);
58 54
59 std::string json; 55 std::string json;
60 if (!base::ReadFileToString(filepath, &json)) { 56 if (!base::ReadFileToString(filepath, &json)) {
61 LOG(ERROR) << filename << ": couldn't read file."; 57 LOG(ERROR) << filename << ": couldn't read file.";
62 return false; 58 return false;
63 } 59 }
64 60
(...skipping 17 matching lines...) Expand all
82 78
83 int id_int; 79 int id_int;
84 if (!dict->GetInteger("id", &id_int)) { 80 if (!dict->GetInteger("id", &id_int)) {
85 LOG(ERROR) << filename << ": id is missing or not an integer."; 81 LOG(ERROR) << filename << ": id is missing or not an integer.";
86 return false; 82 return false;
87 } 83 }
88 if (!FitsUint16(id_int)) { 84 if (!FitsUint16(id_int)) {
89 LOG(ERROR) << filename << ": id is out of range."; 85 LOG(ERROR) << filename << ": id is out of range.";
90 return false; 86 return false;
91 } 87 }
92 *id = static_cast<uint16_t>(id_int); 88 *id = static_cast<uint16>(id_int);
93 89
94 if (!dict->GetStringASCII("qname", qname)) { 90 if (!dict->GetStringASCII("qname", qname)) {
95 LOG(ERROR) << filename << ": qname is missing or not a string."; 91 LOG(ERROR) << filename << ": qname is missing or not a string.";
96 return false; 92 return false;
97 } 93 }
98 94
99 int qtype_int; 95 int qtype_int;
100 if (!dict->GetInteger("qtype", &qtype_int)) { 96 if (!dict->GetInteger("qtype", &qtype_int)) {
101 LOG(ERROR) << filename << ": qtype is missing or not an integer."; 97 LOG(ERROR) << filename << ": qtype is missing or not an integer.";
102 return false; 98 return false;
103 } 99 }
104 if (!FitsUint16(qtype_int)) { 100 if (!FitsUint16(qtype_int)) {
105 LOG(ERROR) << filename << ": qtype is out of range."; 101 LOG(ERROR) << filename << ": qtype is out of range.";
106 return false; 102 return false;
107 } 103 }
108 *qtype = static_cast<uint16_t>(qtype_int); 104 *qtype = static_cast<uint16>(qtype_int);
109 105
110 base::ListValue* resp_list; 106 base::ListValue* resp_list;
111 if (!dict->GetList("response", &resp_list)) { 107 if (!dict->GetList("response", &resp_list)) {
112 LOG(ERROR) << filename << ": response is missing or not a list."; 108 LOG(ERROR) << filename << ": response is missing or not a list.";
113 return false; 109 return false;
114 } 110 }
115 111
116 size_t resp_size = resp_list->GetSize(); 112 size_t resp_size = resp_list->GetSize();
117 resp_buf->clear(); 113 resp_buf->clear();
118 resp_buf->reserve(resp_size); 114 resp_buf->reserve(resp_size);
(...skipping 12 matching lines...) Expand all
131 DCHECK(resp_buf->size() == resp_size); 127 DCHECK(resp_buf->size() == resp_size);
132 128
133 LOG(INFO) << "Query: id=" << id_int << ", " 129 LOG(INFO) << "Query: id=" << id_int << ", "
134 << "qname=" << *qname << ", " 130 << "qname=" << *qname << ", "
135 << "qtype=" << qtype_int << ", " 131 << "qtype=" << qtype_int << ", "
136 << "resp_size=" << resp_size; 132 << "resp_size=" << resp_size;
137 133
138 return true; 134 return true;
139 } 135 }
140 136
141 void RunTestCase(uint16_t id, 137 void RunTestCase(uint16 id, std::string& qname, uint16 qtype,
142 std::string& qname,
143 uint16_t qtype,
144 std::vector<char>& resp_buf) { 138 std::vector<char>& resp_buf) {
145 net::DnsQuery query(id, qname, qtype); 139 net::DnsQuery query(id, qname, qtype);
146 net::DnsResponse response; 140 net::DnsResponse response;
147 std::copy(resp_buf.begin(), resp_buf.end(), response.io_buffer()->data()); 141 std::copy(resp_buf.begin(), resp_buf.end(), response.io_buffer()->data());
148 142
149 if (!response.InitParse(resp_buf.size(), query)) { 143 if (!response.InitParse(resp_buf.size(), query)) {
150 LOG(INFO) << "InitParse failed."; 144 LOG(INFO) << "InitParse failed.";
151 return; 145 return;
152 } 146 }
153 147
(...skipping 10 matching lines...) Expand all
164 std::stringstream result_line; 158 std::stringstream result_line;
165 result_line << "Response: address_list={ "; 159 result_line << "Response: address_list={ ";
166 for (unsigned int i = 0; i < address_list.size(); i++) 160 for (unsigned int i = 0; i < address_list.size(); i++)
167 result_line << address_list[i].ToString() << " "; 161 result_line << address_list[i].ToString() << " ";
168 result_line << "}, ttl=" << ttl.InSeconds() << "s"; 162 result_line << "}, ttl=" << ttl.InSeconds() << "s";
169 163
170 LOG(INFO) << result_line.str(); 164 LOG(INFO) << result_line.str();
171 } 165 }
172 166
173 bool ReadAndRunTestCase(const char* filename) { 167 bool ReadAndRunTestCase(const char* filename) {
174 uint16_t id = 0; 168 uint16 id = 0;
175 std::string qname; 169 std::string qname;
176 uint16_t qtype = 0; 170 uint16 qtype = 0;
177 std::vector<char> resp_buf; 171 std::vector<char> resp_buf;
178 bool crash_test = false; 172 bool crash_test = false;
179 173
180 LOG(INFO) << "Test case: " << filename; 174 LOG(INFO) << "Test case: " << filename;
181 175
182 // ReadTestCase will print a useful error message if it fails. 176 // ReadTestCase will print a useful error message if it fails.
183 if (!ReadTestCase(filename, &id, &qname, &qtype, &resp_buf, &crash_test)) 177 if (!ReadTestCase(filename, &id, &qname, &qtype, &resp_buf, &crash_test))
184 return false; 178 return false;
185 179
186 if (crash_test) { 180 if (crash_test) {
(...skipping 25 matching lines...) Expand all
212 if (!ReadAndRunTestCase(argv[i])) 206 if (!ReadAndRunTestCase(argv[i]))
213 ret = 2; 207 ret = 2;
214 208
215 // Cluster-Fuzz likes "#EOF" as the last line of output to help distinguish 209 // Cluster-Fuzz likes "#EOF" as the last line of output to help distinguish
216 // successful runs from crashes. 210 // successful runs from crashes.
217 printf("#EOF\n"); 211 printf("#EOF\n");
218 212
219 return ret; 213 return ret;
220 } 214 }
221 215
OLDNEW
« no previous file with comments | « net/test/spawned_test_server/spawner_communicator.cc ('k') | sandbox/win/src/sandbox_nt_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698