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

Side by Side Diff: tools/ipc_fuzzer/mutate/generate.cc

Issue 900483002: Add another batch of GenerateTraits. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comment Created 5 years, 10 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <stdlib.h> 5 #include <stdlib.h>
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <iostream> 8 #include <iostream>
9 #include <ostream> 9 #include <ostream>
10 #include <set> 10 #include <set>
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 --g_depth; 443 --g_depth;
444 return false; 444 return false;
445 } 445 }
446 p->insert(place_holder); 446 p->insert(place_holder);
447 } 447 }
448 --g_depth; 448 --g_depth;
449 return true; 449 return true;
450 } 450 }
451 }; 451 };
452 452
453 template <class A, class B, class C, class D>
454 struct GenerateTraits<std::map<A, B, C, D>> {
455 static bool Generate(std::map<A, B, C, D>* p, Generator* generator) {
456 static int g_depth = 0;
457 size_t count = ++g_depth > 3 ? 0 : RandElementCount();
458 std::pair<A, B> place_holder;
459 for (size_t i = 0; i < count; ++i) {
460 if (!GenerateParam(&place_holder, generator)) {
461 --g_depth;
462 return false;
463 }
464 p->insert(place_holder);
465 }
466 --g_depth;
467 return true;
468 }
469 };
470
453 template <class A, class B> 471 template <class A, class B>
454 struct GenerateTraits<std::pair<A, B> > { 472 struct GenerateTraits<std::pair<A, B> > {
455 static bool Generate(std::pair<A, B>* p, Generator* generator) { 473 static bool Generate(std::pair<A, B>* p, Generator* generator) {
456 return 474 return
457 GenerateParam(&p->first, generator) && 475 GenerateParam(&p->first, generator) &&
458 GenerateParam(&p->second, generator); 476 GenerateParam(&p->second, generator);
459 } 477 }
460 }; 478 };
461 479
462 // Specializations to generate hand-coded types. 480 // Specializations to generate hand-coded types.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 static bool Generate(base::File::Info* p, Generator* generator) { 515 static bool Generate(base::File::Info* p, Generator* generator) {
498 double last_modified; 516 double last_modified;
499 double last_accessed; 517 double last_accessed;
500 double creation_time; 518 double creation_time;
501 if (!GenerateParam(&p->size, generator)) 519 if (!GenerateParam(&p->size, generator))
502 return false; 520 return false;
503 if (!GenerateParam(&p->is_directory, generator)) 521 if (!GenerateParam(&p->is_directory, generator))
504 return false; 522 return false;
505 if (!GenerateParam(&last_modified, generator)) 523 if (!GenerateParam(&last_modified, generator))
506 return false; 524 return false;
507 if (GenerateParam(&last_accessed, generator)) 525 if (!GenerateParam(&last_accessed, generator))
508 return false; 526 return false;
509 if (GenerateParam(&creation_time, generator)) 527 if (!GenerateParam(&creation_time, generator))
510 return false; 528 return false;
511 p->last_modified = base::Time::FromDoubleT(last_modified); 529 p->last_modified = base::Time::FromDoubleT(last_modified);
512 p->last_accessed = base::Time::FromDoubleT(last_accessed); 530 p->last_accessed = base::Time::FromDoubleT(last_accessed);
513 p->creation_time = base::Time::FromDoubleT(creation_time); 531 p->creation_time = base::Time::FromDoubleT(creation_time);
514 return true; 532 return true;
515 } 533 }
516 }; 534 };
517 535
518 template <> 536 template <>
519 struct GenerateTraits<base::Time> { 537 struct GenerateTraits<base::Time> {
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 case 2: { 952 case 2: {
935 *p = content::IndexedDBKeyPath(); 953 *p = content::IndexedDBKeyPath();
936 break; 954 break;
937 } 955 }
938 } 956 }
939 return true; 957 return true;
940 } 958 }
941 }; 959 };
942 960
943 template <> 961 template <>
962 struct GenerateTraits<content::NPIdentifier_Param> {
963 static bool Generate(content::NPIdentifier_Param* p, Generator* generator) {
964 // TODO(mbarbella): This should actually generate something.
965 *p = content::NPIdentifier_Param();
966 return true;
967 }
968 };
969
970 template <>
971 struct GenerateTraits<content::NPVariant_Param> {
972 static bool Generate(content::NPVariant_Param* p, Generator* generator) {
973 // TODO(mbarbella): This should actually generate something.
974 *p = content::NPVariant_Param();
975 return true;
976 }
977 };
978
979 template <>
944 struct GenerateTraits<content::PageState> { 980 struct GenerateTraits<content::PageState> {
945 static bool Generate(content::PageState *p, Generator* generator) { 981 static bool Generate(content::PageState* p, Generator* generator) {
946 std::string junk; 982 std::string junk;
947 if (!GenerateParam(&junk, generator)) 983 if (!GenerateParam(&junk, generator))
948 return false; 984 return false;
949 *p = content::PageState::CreateFromEncodedData(junk); 985 *p = content::PageState::CreateFromEncodedData(junk);
950 return true; 986 return true;
951 } 987 }
952 }; 988 };
953 989
954 template <> 990 template <>
991 struct GenerateTraits<content::SyntheticGesturePacket> {
992 static bool Generate(content::SyntheticGesturePacket* p,
993 Generator* generator) {
994 scoped_ptr<content::SyntheticGestureParams> gesture_params;
995 switch (RandInRange(3)) {
996 case 0: {
inferno 2015/02/03 04:26:48 use real enums here.
997 content::SyntheticSmoothScrollGestureParams* params =
998 new content::SyntheticSmoothScrollGestureParams();
999 if (!GenerateParam(&params->anchor, generator))
1000 return false;
1001 if (!GenerateParam(&params->distances, generator))
1002 return false;
1003 if (!GenerateParam(&params->prevent_fling, generator))
1004 return false;
1005 if (!GenerateParam(&params->speed_in_pixels_s, generator))
1006 return false;
1007 gesture_params.reset(params);
1008 break;
1009 }
1010 case 1: {
1011 content::SyntheticPinchGestureParams* params =
1012 new content::SyntheticPinchGestureParams();
1013 if (!GenerateParam(&params->anchor, generator))
inferno 2015/02/03 04:26:48 missing scale_factor
1014 return false;
1015 if (!GenerateParam(&params->relative_pointer_speed_in_pixels_s,
1016 generator))
1017 return false;
1018 gesture_params.reset(params);
1019 break;
1020 }
1021 case 2: {
1022 content::SyntheticTapGestureParams* params =
1023 new content::SyntheticTapGestureParams();
1024 if (!GenerateParam(&params->position, generator))
1025 return false;
1026 if (!GenerateParam(&params->duration_ms, generator))
1027 return false;
1028 gesture_params.reset(params);
1029 break;
1030 }
1031 }
1032 p->set_gesture_params(gesture_params.Pass());
1033 return true;
1034 }
1035 };
1036
1037 template <>
1038 struct GenerateTraits<content::WebCursor> {
1039 static bool Generate(content::WebCursor* p, Generator* generator) {
1040 blink::WebCursorInfo::Type type;
inferno 2015/02/03 04:26:48 missing some vars gfx::Point hotspot; floa
1041 if (!GenerateParam(&type, generator))
1042 return false;
1043 *p = content::WebCursor(content::WebCursor::CursorInfo(type));
1044 return true;
1045 }
1046 };
1047
1048 template <>
1049 struct GenerateTraits<ContentSettingsPattern> {
1050 static bool Generate(ContentSettingsPattern* p, Generator* generator) {
1051 // This can crash if arbitrary strings are passed to it, so intentially
inferno 2015/02/03 04:26:48 Add a TODO here.
1052 // create an empty pattern to avoid problems during generation.
1053 *p = ContentSettingsPattern();
1054 return true;
1055 }
1056 };
1057
1058 template <>
1059 struct GenerateTraits<ExtensionMsg_PermissionSetStruct> {
1060 static bool Generate(ExtensionMsg_PermissionSetStruct* p,
1061 Generator* generator) {
1062 // TODO(mbarbella): This should actually generate something.
1063 *p = ExtensionMsg_PermissionSetStruct();
1064 return true;
1065 }
1066 };
1067
1068 template <>
955 struct GenerateTraits<extensions::URLPatternSet> { 1069 struct GenerateTraits<extensions::URLPatternSet> {
956 static bool Generate(extensions::URLPatternSet* p, Generator* generator) { 1070 static bool Generate(extensions::URLPatternSet* p, Generator* generator) {
957 std::set<URLPattern> patterns; 1071 std::set<URLPattern> patterns;
958 if (!GenerateParam(&patterns, generator)) 1072 if (!GenerateParam(&patterns, generator))
959 return false; 1073 return false;
960 *p = extensions::URLPatternSet(patterns); 1074 *p = extensions::URLPatternSet(patterns);
961 return true; 1075 return true;
962 } 1076 }
963 }; 1077 };
964
965 template <>
966 struct GenerateTraits<gpu::Mailbox> {
967 static bool Generate(gpu::Mailbox *p, Generator* generator) {
968 generator->GenerateBytes(p->name, sizeof(p->name));
969 return true;
970 }
971 };
972
973 template <>
974 struct GenerateTraits<gpu::MailboxHolder> {
975 static bool Generate(gpu::MailboxHolder *p, Generator* generator) {
976 gpu::Mailbox mailbox;
977 uint32_t texture_target;
978 uint32_t sync_point;
979 if (!GenerateParam(&mailbox, generator))
980 return false;
981 if (!GenerateParam(&texture_target, generator))
982 return false;
983 if (!GenerateParam(&sync_point, generator))
984 return false;
985 *p = gpu::MailboxHolder(mailbox, texture_target, sync_point);
986 return true;
987 }
988 };
989
990 template <>
991 struct GenerateTraits<gpu::ValueState> {
992 static bool Generate(gpu::ValueState* p, Generator* generator) {
993 gpu::ValueState state;
994 if (!GenerateParamArray(&state.float_value[0], 4, generator))
995 return false;
996 if (!GenerateParamArray(&state.int_value[0], 4, generator))
997 return false;
998 *p = state;
999 return true;
1000 }
1001 };
1002
1003 template <>
1004 struct GenerateTraits<GURL> {
1005 static bool Generate(GURL *p, Generator* generator) {
1006 const char url_chars[] = "Ahtp0:/.?+\\%&#";
1007 size_t count = RandInRange(100);
1008 std::string random_url;
1009 for (size_t i = 0; i < count; ++i)
1010 random_url += url_chars[RandInRange(sizeof(url_chars) - 1)];
1011 int selector = RandInRange(10);
1012 if (selector == 0)
1013 random_url = std::string("http://") + random_url;
1014 else if (selector == 1)
1015 random_url = std::string("file://") + random_url;
1016 else if (selector == 2)
1017 random_url = std::string("javascript:") + random_url;
1018 else if (selector == 2)
1019 random_url = std::string("data:") + random_url;
1020 *p = GURL(random_url);
1021 return true;
1022 }
1023 };
1024
1025 template <>
1026 struct GenerateTraits<media::AudioParameters> {
1027 static bool Generate(media::AudioParameters *p, Generator* generator) {
1028 int format;
1029 int channel_layout;
1030 int sample_rate;
1031 int bits_per_sample;
1032 int frames_per_buffer;
1033 int channels;
1034 int effects;
1035 if (!GenerateParam(&format, generator))
1036 return false;
1037 if (!GenerateParam(&channel_layout, generator))
1038 return false;
1039 if (!GenerateParam(&sample_rate, generator))
1040 return false;
1041 if (!GenerateParam(&bits_per_sample, generator))
1042 return false;
1043 if (!GenerateParam(&frames_per_buffer, generator))
1044 return false;
1045 if (!GenerateParam(&channels, generator))
1046 return false;
1047 if (!GenerateParam(&effects, generator))
1048 return false;
1049 media::AudioParameters params(
1050 static_cast<media::AudioParameters::Format>(format),
1051 static_cast<media::ChannelLayout>(channel_layout),
1052 channels,
1053 sample_rate,
1054 bits_per_sample,
1055 frames_per_buffer,
1056 effects);
1057 *p = params;
1058 return true;
1059 }
1060 };
1061
1062 template <>
1063 struct GenerateTraits<media::VideoCaptureFormat> {
1064 static bool Generate(media::VideoCaptureFormat *p, Generator* generator) {
1065 int frame_size_width;
1066 int frame_size_height;
1067 int pixel_format;
1068 if (!GenerateParam(&frame_size_height, generator))
1069 return false;
1070 if (!GenerateParam(&frame_size_width, generator))
1071 return false;
1072 if (!GenerateParam(&pixel_format, generator))
1073 return false;
1074 if (!GenerateParam(&p->frame_rate, generator))
1075 return false;
1076 p->frame_size.SetSize(frame_size_width, frame_size_height);
1077 p->pixel_format = static_cast<media::VideoPixelFormat>(pixel_format);
1078 return true;
1079 }
1080 };
1081
1082
1083 template <>
1084 struct GenerateTraits<net::LoadTimingInfo> {
1085 static bool Generate(net::LoadTimingInfo *p, Generator* generator) {
1086 return
1087 GenerateParam(&p->socket_log_id, generator) &&
1088 GenerateParam(&p->socket_reused, generator) &&
1089 GenerateParam(&p->request_start_time, generator) &&
1090 GenerateParam(&p->request_start, generator) &&
1091 GenerateParam(&p->proxy_resolve_start, generator) &&
1092 GenerateParam(&p->proxy_resolve_end, generator) &&
1093 GenerateParam(&p->connect_timing.dns_start, generator) &&
1094 GenerateParam(&p->connect_timing.dns_end, generator) &&
1095 GenerateParam(&p->connect_timing.connect_start, generator) &&
1096 GenerateParam(&p->connect_timing.connect_end, generator) &&
1097 GenerateParam(&p->connect_timing.ssl_start, generator) &&
1098 GenerateParam(&p->connect_timing.ssl_end, generator) &&
1099 GenerateParam(&p->send_start, generator) &&
1100 GenerateParam(&p->send_end, generator) &&
1101 GenerateParam(&p->receive_headers_end, generator);
1102 }
1103 };
1104
1105 template <>
1106 struct GenerateTraits<net::HostPortPair> {
1107 static bool Generate(net::HostPortPair *p, Generator* generator) {
1108 std::string host;
1109 uint16 port;
1110 if (!GenerateParam(&host, generator))
1111 return false;
1112 if (!GenerateParam(&port, generator))
1113 return false;
1114 p->set_host(host);
1115 p->set_port(port);
1116 return true;
1117 }
1118 };
1119
1120 template <>
1121 struct GenerateTraits<net::IPEndPoint> {
1122 static bool Generate(net::IPEndPoint *p, Generator* generator) {
1123 net::IPAddressNumber address;
1124 int port;
1125 if (!GenerateParam(&address, generator))
1126 return false;
1127 if (!GenerateParam(&port, generator))
1128 return false;
1129 net::IPEndPoint ip_endpoint(address, port);
1130 *p = ip_endpoint;
1131 return true;
1132 }
1133 };
1134
1135 template <>
1136 struct GenerateTraits<network_hints::LookupRequest> {
1137 static bool Generate(network_hints::LookupRequest* p, Generator* generator) {
1138 network_hints::LookupRequest request;
1139 if (!GenerateParam(&request.hostname_list, generator))
1140 return false;
1141 *p = request;
1142 return true;
1143 }
1144 };
1145 1078
1146 template <> 1079 template <>
1147 struct GenerateTraits<gfx::Point> { 1080 struct GenerateTraits<gfx::Point> {
1148 static bool Generate(gfx::Point *p, Generator* generator) { 1081 static bool Generate(gfx::Point *p, Generator* generator) {
1149 int x; 1082 int x;
1150 int y; 1083 int y;
1151 if (!GenerateParam(&x, generator)) 1084 if (!GenerateParam(&x, generator))
1152 return false; 1085 return false;
1153 if (!GenerateParam(&y, generator)) 1086 if (!GenerateParam(&y, generator))
1154 return false; 1087 return false;
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1279 if (!GenerateParam(&x, generator)) 1212 if (!GenerateParam(&x, generator))
1280 return false; 1213 return false;
1281 if (!GenerateParam(&y, generator)) 1214 if (!GenerateParam(&y, generator))
1282 return false; 1215 return false;
1283 *p = gfx::Vector2dF(x, y); 1216 *p = gfx::Vector2dF(x, y);
1284 return true; 1217 return true;
1285 } 1218 }
1286 }; 1219 };
1287 1220
1288 template <> 1221 template <>
1222 struct GenerateTraits<gpu::Mailbox> {
1223 static bool Generate(gpu::Mailbox* p, Generator* generator) {
1224 generator->GenerateBytes(p->name, sizeof(p->name));
1225 return true;
1226 }
1227 };
1228
1229 template <>
1230 struct GenerateTraits<gpu::MailboxHolder> {
1231 static bool Generate(gpu::MailboxHolder* p, Generator* generator) {
1232 gpu::Mailbox mailbox;
1233 uint32_t texture_target;
1234 uint32_t sync_point;
1235 if (!GenerateParam(&mailbox, generator))
1236 return false;
1237 if (!GenerateParam(&texture_target, generator))
1238 return false;
1239 if (!GenerateParam(&sync_point, generator))
1240 return false;
1241 *p = gpu::MailboxHolder(mailbox, texture_target, sync_point);
1242 return true;
1243 }
1244 };
1245
1246 template <>
1247 struct GenerateTraits<gpu::ValueState> {
1248 static bool Generate(gpu::ValueState* p, Generator* generator) {
1249 gpu::ValueState state;
1250 if (!GenerateParamArray(&state.float_value[0], 4, generator))
1251 return false;
1252 if (!GenerateParamArray(&state.int_value[0], 4, generator))
1253 return false;
1254 *p = state;
1255 return true;
1256 }
1257 };
1258
1259 template <>
1260 struct GenerateTraits<GURL> {
1261 static bool Generate(GURL* p, Generator* generator) {
1262 const char url_chars[] = "Ahtp0:/.?+\\%&#";
1263 size_t count = RandInRange(100);
1264 std::string random_url;
1265 for (size_t i = 0; i < count; ++i)
1266 random_url += url_chars[RandInRange(sizeof(url_chars) - 1)];
1267 int selector = RandInRange(10);
1268 if (selector == 0)
1269 random_url = std::string("http://") + random_url;
1270 else if (selector == 1)
1271 random_url = std::string("file://") + random_url;
1272 else if (selector == 2)
1273 random_url = std::string("javascript:") + random_url;
1274 else if (selector == 2)
1275 random_url = std::string("data:") + random_url;
1276 *p = GURL(random_url);
1277 return true;
1278 }
1279 };
1280
1281 template <>
1289 struct GenerateTraits<IPC::Message> { 1282 struct GenerateTraits<IPC::Message> {
1290 static bool Generate(IPC::Message *p, Generator* generator) { 1283 static bool Generate(IPC::Message *p, Generator* generator) {
1291 if (g_function_vector.empty()) 1284 if (g_function_vector.empty())
1292 return false; 1285 return false;
1293 size_t index = RandInRange(g_function_vector.size()); 1286 size_t index = RandInRange(g_function_vector.size());
1294 IPC::Message* ipc_message = (*g_function_vector[index])(generator); 1287 IPC::Message* ipc_message = (*g_function_vector[index])(generator);
1295 if (!ipc_message) 1288 if (!ipc_message)
1296 return false; 1289 return false;
1297 p = ipc_message; 1290 p = ipc_message;
1298 return true; 1291 return true;
(...skipping 19 matching lines...) Expand all
1318 p->pipe = IPC::ChannelHandle::PipeHandle(fake_handle); 1311 p->pipe = IPC::ChannelHandle::PipeHandle(fake_handle);
1319 return true; 1312 return true;
1320 #elif defined(OS_POSIX) 1313 #elif defined(OS_POSIX)
1321 return 1314 return
1322 GenerateParam(&p->name, generator) && 1315 GenerateParam(&p->name, generator) &&
1323 GenerateParam(&p->socket, generator); 1316 GenerateParam(&p->socket, generator);
1324 #endif 1317 #endif
1325 } 1318 }
1326 }; 1319 };
1327 1320
1321 template <>
1322 struct GenerateTraits<media::AudioParameters> {
1323 static bool Generate(media::AudioParameters* p, Generator* generator) {
1324 int format;
1325 int channel_layout;
1326 int sample_rate;
1327 int bits_per_sample;
1328 int frames_per_buffer;
1329 int channels;
1330 int effects;
1331 if (!GenerateParam(&format, generator))
1332 return false;
1333 if (!GenerateParam(&channel_layout, generator))
1334 return false;
1335 if (!GenerateParam(&sample_rate, generator))
1336 return false;
1337 if (!GenerateParam(&bits_per_sample, generator))
1338 return false;
1339 if (!GenerateParam(&frames_per_buffer, generator))
1340 return false;
1341 if (!GenerateParam(&channels, generator))
1342 return false;
1343 if (!GenerateParam(&effects, generator))
1344 return false;
1345 media::AudioParameters params(
1346 static_cast<media::AudioParameters::Format>(format),
1347 static_cast<media::ChannelLayout>(channel_layout), channels,
1348 sample_rate, bits_per_sample, frames_per_buffer, effects);
1349 *p = params;
1350 return true;
1351 }
1352 };
1353
1354 template <>
1355 struct GenerateTraits<media::VideoCaptureFormat> {
1356 static bool Generate(media::VideoCaptureFormat* p, Generator* generator) {
1357 int frame_size_width;
1358 int frame_size_height;
1359 int pixel_format;
1360 if (!GenerateParam(&frame_size_height, generator))
1361 return false;
1362 if (!GenerateParam(&frame_size_width, generator))
1363 return false;
1364 if (!GenerateParam(&pixel_format, generator))
1365 return false;
1366 if (!GenerateParam(&p->frame_rate, generator))
1367 return false;
1368 p->frame_size.SetSize(frame_size_width, frame_size_height);
1369 p->pixel_format = static_cast<media::VideoPixelFormat>(pixel_format);
1370 return true;
1371 }
1372 };
1373
1374 template <>
1375 struct GenerateTraits<net::LoadTimingInfo> {
1376 static bool Generate(net::LoadTimingInfo* p, Generator* generator) {
1377 return GenerateParam(&p->socket_log_id, generator) &&
1378 GenerateParam(&p->socket_reused, generator) &&
1379 GenerateParam(&p->request_start_time, generator) &&
1380 GenerateParam(&p->request_start, generator) &&
1381 GenerateParam(&p->proxy_resolve_start, generator) &&
1382 GenerateParam(&p->proxy_resolve_end, generator) &&
1383 GenerateParam(&p->connect_timing.dns_start, generator) &&
1384 GenerateParam(&p->connect_timing.dns_end, generator) &&
1385 GenerateParam(&p->connect_timing.connect_start, generator) &&
1386 GenerateParam(&p->connect_timing.connect_end, generator) &&
1387 GenerateParam(&p->connect_timing.ssl_start, generator) &&
1388 GenerateParam(&p->connect_timing.ssl_end, generator) &&
1389 GenerateParam(&p->send_start, generator) &&
1390 GenerateParam(&p->send_end, generator) &&
1391 GenerateParam(&p->receive_headers_end, generator);
1392 }
1393 };
1394
1395 template <>
1396 struct GenerateTraits<net::HostPortPair> {
1397 static bool Generate(net::HostPortPair* p, Generator* generator) {
1398 std::string host;
1399 uint16 port;
1400 if (!GenerateParam(&host, generator))
1401 return false;
1402 if (!GenerateParam(&port, generator))
1403 return false;
1404 p->set_host(host);
1405 p->set_port(port);
1406 return true;
1407 }
1408 };
1409
1410 template <>
1411 struct GenerateTraits<net::IPEndPoint> {
1412 static bool Generate(net::IPEndPoint* p, Generator* generator) {
1413 net::IPAddressNumber address;
1414 int port;
1415 if (!GenerateParam(&address, generator))
1416 return false;
1417 if (!GenerateParam(&port, generator))
1418 return false;
1419 net::IPEndPoint ip_endpoint(address, port);
1420 *p = ip_endpoint;
1421 return true;
1422 }
1423 };
1424
1425 template <>
1426 struct GenerateTraits<network_hints::LookupRequest> {
1427 static bool Generate(network_hints::LookupRequest* p, Generator* generator) {
1428 network_hints::LookupRequest request;
1429 if (!GenerateParam(&request.hostname_list, generator))
1430 return false;
1431 *p = request;
1432 return true;
1433 }
1434 };
1435
1328 // PP_ traits. 1436 // PP_ traits.
1329 template <> 1437 template <>
1330 struct GenerateTraits<PP_Bool> { 1438 struct GenerateTraits<PP_Bool> {
1331 static bool Generate(PP_Bool *p, Generator* generator) { 1439 static bool Generate(PP_Bool *p, Generator* generator) {
1332 bool tmp; 1440 bool tmp;
1333 if (!GenerateParam(&tmp, generator)) 1441 if (!GenerateParam(&tmp, generator))
1334 return false; 1442 return false;
1335 *p = PP_FromBool(tmp); 1443 *p = PP_FromBool(tmp);
1336 return true; 1444 return true;
1337 } 1445 }
1338 }; 1446 };
1339 1447
1340 template <> 1448 template <>
1449 struct GenerateTraits<PP_KeyInformation> {
1450 static bool Generate(PP_KeyInformation* p, Generator* generator) {
1451 // TODO(mbarbella): This should actually generate something.
1452 *p = PP_KeyInformation();
1453 return true;
1454 }
1455 };
1456
1457 template <>
1341 struct GenerateTraits<PP_NetAddress_Private> { 1458 struct GenerateTraits<PP_NetAddress_Private> {
1342 static bool Generate(PP_NetAddress_Private *p, Generator* generator) { 1459 static bool Generate(PP_NetAddress_Private *p, Generator* generator) {
1343 p->size = RandInRange(sizeof(p->data) + 1); 1460 p->size = RandInRange(sizeof(p->data) + 1);
1344 generator->GenerateBytes(&p->data, p->size); 1461 generator->GenerateBytes(&p->data, p->size);
1345 return true; 1462 return true;
1346 } 1463 }
1347 }; 1464 };
1348 1465
1349 template <> 1466 template <>
1467 struct GenerateTraits<ppapi::PPB_X509Certificate_Fields> {
1468 static bool Generate(ppapi::PPB_X509Certificate_Fields* p,
1469 Generator* generator) {
1470 // TODO(mbarbella): This should actually generate something.
1471 return true;
1472 }
1473 };
1474
1475 template <>
1476 struct GenerateTraits<ppapi::proxy::PPBFlash_DrawGlyphs_Params> {
1477 static bool Generate(ppapi::proxy::PPBFlash_DrawGlyphs_Params* p,
1478 Generator* generator) {
1479 // TODO(mbarbella): This should actually generate something.
1480 *p = ppapi::proxy::PPBFlash_DrawGlyphs_Params();
1481 return true;
1482 }
1483 };
1484
1485 template <>
1350 struct GenerateTraits<ppapi::proxy::ResourceMessageCallParams> { 1486 struct GenerateTraits<ppapi::proxy::ResourceMessageCallParams> {
1351 static bool Generate( 1487 static bool Generate(
1352 ppapi::proxy::ResourceMessageCallParams *p, Generator* generator) { 1488 ppapi::proxy::ResourceMessageCallParams *p, Generator* generator) {
1353 PP_Resource resource; 1489 PP_Resource resource;
1354 int32_t sequence; 1490 int32_t sequence;
1355 bool has_callback; 1491 bool has_callback;
1356 if (!GenerateParam(&resource, generator)) 1492 if (!GenerateParam(&resource, generator))
1357 return false; 1493 return false;
1358 if (!GenerateParam(&sequence, generator)) 1494 if (!GenerateParam(&sequence, generator))
1359 return false; 1495 return false;
(...skipping 19 matching lines...) Expand all
1379 return false; 1515 return false;
1380 if (!GenerateParam(&result, generator)) 1516 if (!GenerateParam(&result, generator))
1381 return false; 1517 return false;
1382 *p = ppapi::proxy::ResourceMessageReplyParams(resource, sequence); 1518 *p = ppapi::proxy::ResourceMessageReplyParams(resource, sequence);
1383 p->set_result(result); 1519 p->set_result(result);
1384 return true; 1520 return true;
1385 } 1521 }
1386 }; 1522 };
1387 1523
1388 template <> 1524 template <>
1525 struct GenerateTraits<ppapi::proxy::SerializedHandle> {
1526 static bool Generate(ppapi::proxy::SerializedHandle* p,
1527 Generator* generator) {
1528 // TODO(mbarbella): This should actually generate something.
1529 *p = ppapi::proxy::SerializedHandle();
1530 return true;
1531 }
1532 };
1533
1534 template <>
1535 struct GenerateTraits<ppapi::proxy::SerializedFontDescription> {
1536 static bool Generate(ppapi::proxy::SerializedFontDescription* p,
1537 Generator* generator) {
1538 // TODO(mbarbella): This should actually generate something.
1539 *p = ppapi::proxy::SerializedFontDescription();
1540 return true;
1541 }
1542 };
1543
1544 template <>
1545 struct GenerateTraits<ppapi::proxy::SerializedTrueTypeFontDesc> {
1546 static bool Generate(ppapi::proxy::SerializedTrueTypeFontDesc* p,
1547 Generator* generator) {
1548 // TODO(mbarbella): This should actually generate something.
1549 *p = ppapi::proxy::SerializedTrueTypeFontDesc();
1550 return true;
1551 }
1552 };
1553
1554 template <>
1555 struct GenerateTraits<ppapi::proxy::SerializedVar> {
1556 static bool Generate(ppapi::proxy::SerializedVar* p, Generator* generator) {
1557 // TODO(mbarbella): This should actually generate something.
1558 *p = ppapi::proxy::SerializedVar();
1559 return true;
1560 }
1561 };
1562
1563 template <>
1389 struct GenerateTraits<ppapi::HostResource> { 1564 struct GenerateTraits<ppapi::HostResource> {
1390 static bool Generate(ppapi::HostResource *p, Generator* generator) { 1565 static bool Generate(ppapi::HostResource *p, Generator* generator) {
1391 PP_Instance instance; 1566 PP_Instance instance;
1392 PP_Resource resource; 1567 PP_Resource resource;
1393 if (!GenerateParam(&instance, generator)) 1568 if (!GenerateParam(&instance, generator))
1394 return false; 1569 return false;
1395 if (!GenerateParam(&resource, generator)) 1570 if (!GenerateParam(&resource, generator))
1396 return false; 1571 return false;
1397 p->SetHostResource(instance, resource); 1572 p->SetHostResource(instance, resource);
1398 return true; 1573 return true;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1459 webrtc::DesktopVector vector; 1634 webrtc::DesktopVector vector;
1460 if (!GenerateParam(&size, generator)) 1635 if (!GenerateParam(&size, generator))
1461 return false; 1636 return false;
1462 if (!GenerateParam(&vector, generator)) 1637 if (!GenerateParam(&vector, generator))
1463 return false; 1638 return false;
1464 *p = remoting::ScreenResolution(size, vector); 1639 *p = remoting::ScreenResolution(size, vector);
1465 return true; 1640 return true;
1466 } 1641 }
1467 }; 1642 };
1468 1643
1469 // FIXME: Actually generate something.
1470 template <> 1644 template <>
1471 struct GenerateTraits<SkBitmap> { 1645 struct GenerateTraits<SkBitmap> {
1472 static bool Generate(SkBitmap* p, Generator* generator) { 1646 static bool Generate(SkBitmap* p, Generator* generator) {
1647 // TODO(mbarbella): This should actually generate something.
1473 *p = SkBitmap(); 1648 *p = SkBitmap();
1474 return true; 1649 return true;
1475 } 1650 }
1476 }; 1651 };
1477 1652
1478 template <> 1653 template <>
1654 struct GenerateTraits<storage::DataElement> {
1655 static bool Generate(storage::DataElement* p, Generator* generator) {
1656 switch (RandInRange(5)) {
1657 case 0: {
1658 p->SetToEmptyBytes();
1659 return true;
1660 }
1661 case 1: {
1662 char bytes[256];
inferno 2015/02/03 04:26:48 Add a FIXME: since kLargeThresholdBytes is the max
Martin Barbella 2015/02/04 22:31:23 It seems like this isn't the case for storage::Dat
1663 int bytes_len = RandInRange(sizeof(bytes));
1664 generator->GenerateBytes(&bytes[0], bytes_len);
1665 p->SetToBytes(&bytes[0], bytes_len);
1666 return true;
1667 }
1668 case 2: {
1669 base::FilePath path;
1670 uint64 offset;
1671 uint64 length;
1672 base::Time modification_time;
1673 if (!GenerateParam(&path, generator))
1674 return false;
1675 if (!GenerateParam(&offset, generator))
1676 return false;
1677 if (!GenerateParam(&length, generator))
1678 return false;
1679 if (!GenerateParam(&modification_time, generator))
1680 return false;
1681 p->SetToFilePathRange(path, offset, length, modification_time);
1682 return true;
1683 }
1684 case 3: {
1685 std::string uuid;
1686 uint64 offset;
1687 uint64 length;
1688 if (!GenerateParam(&uuid, generator))
1689 return false;
1690 if (!GenerateParam(&offset, generator))
1691 return false;
1692 if (!GenerateParam(&length, generator))
1693 return false;
1694 p->SetToBlobRange(uuid, offset, length);
1695 return true;
1696 }
1697 case 4: {
inferno 2015/02/03 04:26:48 please use enum here, a little more clear - WebBlo
1698 GURL url;
1699 uint64 offset;
1700 uint64 length;
1701 base::Time modification_time;
1702 if (!GenerateParam(&url, generator))
1703 return false;
1704 if (!GenerateParam(&offset, generator))
1705 return false;
1706 if (!GenerateParam(&length, generator))
1707 return false;
1708 if (!GenerateParam(&modification_time, generator))
1709 return false;
1710 p->SetToFileSystemUrlRange(url, offset, length, modification_time);
1711 return true;
1712 }
1713 default: {
1714 NOTREACHED();
1715 return false;
1716 }
1717 }
1718 }
1719 };
1720
1721 template <>
1479 struct GenerateTraits<ui::LatencyInfo> { 1722 struct GenerateTraits<ui::LatencyInfo> {
1480 static bool Generate(ui::LatencyInfo* p, Generator* generator) { 1723 static bool Generate(ui::LatencyInfo* p, Generator* generator) {
1481 // TODO(inferno): Add param traits for |latency_components|. 1724 // TODO(inferno): Add param traits for |latency_components|.
1482 p->input_coordinates_size = static_cast<uint32>( 1725 p->input_coordinates_size = static_cast<uint32>(
1483 RandInRange(ui::LatencyInfo::kMaxInputCoordinates + 1)); 1726 RandInRange(ui::LatencyInfo::kMaxInputCoordinates + 1));
1484 if (!GenerateParamArray( 1727 if (!GenerateParamArray(
1485 &p->input_coordinates[0], p->input_coordinates_size, generator)) 1728 &p->input_coordinates[0], p->input_coordinates_size, generator))
1486 return false; 1729 return false;
1487 if (!GenerateParam(&p->trace_id, generator)) 1730 if (!GenerateParam(&p->trace_id, generator))
1488 return false; 1731 return false;
(...skipping 23 matching lines...) Expand all
1512 static bool Generate(url::Origin* p, Generator* generator) { 1755 static bool Generate(url::Origin* p, Generator* generator) {
1513 std::string origin; 1756 std::string origin;
1514 if (!GenerateParam(&origin, generator)) 1757 if (!GenerateParam(&origin, generator))
1515 return false; 1758 return false;
1516 *p = url::Origin(origin); 1759 *p = url::Origin(origin);
1517 return true; 1760 return true;
1518 } 1761 }
1519 }; 1762 };
1520 1763
1521 template <> 1764 template <>
1765 struct GenerateTraits<URLPattern> {
1766 static bool Generate(URLPattern* p, Generator* generator) {
1767 int valid_schemes;
inferno 2015/02/03 04:26:48 This is missing a bunch of other vars, like port,
1768 if (!GenerateParam(&valid_schemes, generator))
1769 return false;
1770 *p = URLPattern(valid_schemes);
1771 return true;
1772 }
1773 };
1774
1775 template <>
1522 struct GenerateTraits<webrtc::DesktopSize> { 1776 struct GenerateTraits<webrtc::DesktopSize> {
1523 static bool Generate(webrtc::DesktopSize* p, Generator* generator) { 1777 static bool Generate(webrtc::DesktopSize* p, Generator* generator) {
1524 int32_t width; 1778 int32_t width;
1525 int32_t height; 1779 int32_t height;
1526 if (!GenerateParam(&width, generator)) 1780 if (!GenerateParam(&width, generator))
1527 return false; 1781 return false;
1528 if (!GenerateParam(&height, generator)) 1782 if (!GenerateParam(&height, generator))
1529 return false; 1783 return false;
1530 *p = webrtc::DesktopSize(width, height); 1784 *p = webrtc::DesktopSize(width, height);
1531 return true; 1785 return true;
(...skipping 27 matching lines...) Expand all
1559 return false; 1813 return false;
1560 if (!GenerateParam(&right, generator)) 1814 if (!GenerateParam(&right, generator))
1561 return false; 1815 return false;
1562 if (!GenerateParam(&bottom, generator)) 1816 if (!GenerateParam(&bottom, generator))
1563 return false; 1817 return false;
1564 *p = webrtc::DesktopRect::MakeLTRB(left, top, right, bottom); 1818 *p = webrtc::DesktopRect::MakeLTRB(left, top, right, bottom);
1565 return true; 1819 return true;
1566 } 1820 }
1567 }; 1821 };
1568 1822
1823 template <>
1824 struct GenerateTraits<webrtc::MouseCursor> {
1825 static bool Generate(webrtc::MouseCursor* p, Generator* generator) {
1826 webrtc::DesktopVector hotspot;
1827 if (!GenerateParam(&hotspot, generator))
1828 return false;
1829 // Using a small size here to avoid OOM or overflow on image allocation.
1830 webrtc::DesktopSize size(RandInRange(100), RandInRange(100));
1831 p->set_image(new webrtc::BasicDesktopFrame(size));
1832 p->set_hotspot(hotspot);
1833 return true;
1834 }
1835 };
1836
1569 // Redefine macros to generate generating from traits declarations. 1837 // Redefine macros to generate generating from traits declarations.
1570 // STRUCT declarations cause corresponding STRUCT_TRAITS declarations to occur. 1838 // STRUCT declarations cause corresponding STRUCT_TRAITS declarations to occur.
1571 #undef IPC_STRUCT_BEGIN 1839 #undef IPC_STRUCT_BEGIN
1572 #undef IPC_STRUCT_BEGIN_WITH_PARENT 1840 #undef IPC_STRUCT_BEGIN_WITH_PARENT
1573 #undef IPC_STRUCT_MEMBER 1841 #undef IPC_STRUCT_MEMBER
1574 #undef IPC_STRUCT_END 1842 #undef IPC_STRUCT_END
1575 #define IPC_STRUCT_BEGIN_WITH_PARENT(struct_name, parent) \ 1843 #define IPC_STRUCT_BEGIN_WITH_PARENT(struct_name, parent) \
1576 IPC_STRUCT_BEGIN(struct_name) 1844 IPC_STRUCT_BEGIN(struct_name)
1577 #define IPC_STRUCT_BEGIN(struct_name) IPC_STRUCT_TRAITS_BEGIN(struct_name) 1845 #define IPC_STRUCT_BEGIN(struct_name) IPC_STRUCT_TRAITS_BEGIN(struct_name)
1578 #define IPC_STRUCT_MEMBER(type, name, ...) IPC_STRUCT_TRAITS_MEMBER(name) 1846 #define IPC_STRUCT_MEMBER(type, name, ...) IPC_STRUCT_TRAITS_MEMBER(name)
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
1771 return EXIT_FAILURE; 2039 return EXIT_FAILURE;
1772 2040
1773 return EXIT_SUCCESS; 2041 return EXIT_SUCCESS;
1774 } 2042 }
1775 2043
1776 } // namespace ipc_fuzzer 2044 } // namespace ipc_fuzzer
1777 2045
1778 int main(int argc, char** argv) { 2046 int main(int argc, char** argv) {
1779 return ipc_fuzzer::GenerateMain(argc, argv); 2047 return ipc_fuzzer::GenerateMain(argc, argv);
1780 } 2048 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698