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

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: Fix URLPattern 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 content::SyntheticGestureParams::GestureType::
997 SMOOTH_SCROLL_GESTURE: {
998 content::SyntheticSmoothScrollGestureParams* params =
999 new content::SyntheticSmoothScrollGestureParams();
1000 if (!GenerateParam(&params->anchor, generator))
1001 return false;
1002 if (!GenerateParam(&params->distances, generator))
1003 return false;
1004 if (!GenerateParam(&params->prevent_fling, generator))
1005 return false;
1006 if (!GenerateParam(&params->speed_in_pixels_s, generator))
1007 return false;
1008 gesture_params.reset(params);
1009 break;
1010 }
1011 case content::SyntheticGestureParams::GestureType::PINCH_GESTURE: {
1012 content::SyntheticPinchGestureParams* params =
1013 new content::SyntheticPinchGestureParams();
1014 if (!GenerateParam(&params->scale_factor, generator))
1015 return false;
1016 if (!GenerateParam(&params->anchor, generator))
1017 return false;
1018 if (!GenerateParam(&params->relative_pointer_speed_in_pixels_s,
1019 generator))
1020 return false;
1021 gesture_params.reset(params);
1022 break;
1023 }
1024 case content::SyntheticGestureParams::GestureType::TAP_GESTURE: {
1025 content::SyntheticTapGestureParams* params =
1026 new content::SyntheticTapGestureParams();
1027 if (!GenerateParam(&params->position, generator))
1028 return false;
1029 if (!GenerateParam(&params->duration_ms, generator))
1030 return false;
1031 gesture_params.reset(params);
1032 break;
1033 }
1034 }
1035 p->set_gesture_params(gesture_params.Pass());
1036 return true;
1037 }
1038 };
1039
1040 template <>
1041 struct GenerateTraits<content::WebCursor> {
1042 static bool Generate(content::WebCursor* p, Generator* generator) {
1043 blink::WebCursorInfo::Type type;
1044 if (!GenerateParam(&type, generator))
1045 return false;
1046 content::WebCursor::CursorInfo info(type);
1047
1048 // Omitting |externalHandle| since it is not serialized.
1049 if (!GenerateParam(&info.hotspot, generator))
1050 return false;
1051 if (!GenerateParam(&info.image_scale_factor, generator))
1052 return false;
1053 if (!GenerateParam(&info.custom_image, generator))
1054 return false;
1055 *p = content::WebCursor(info);
1056 return true;
1057 }
1058 };
1059
1060 template <>
1061 struct GenerateTraits<ContentSettingsPattern> {
1062 static bool Generate(ContentSettingsPattern* p, Generator* generator) {
1063 // TODO(mbarbella): This can crash if a pattern is generated from a random
1064 // string. We could carefully generate a pattern or fix pattern generation.
1065 *p = ContentSettingsPattern();
1066 return true;
1067 }
1068 };
1069
1070 template <>
1071 struct GenerateTraits<ExtensionMsg_PermissionSetStruct> {
1072 static bool Generate(ExtensionMsg_PermissionSetStruct* p,
1073 Generator* generator) {
1074 // TODO(mbarbella): This should actually generate something.
1075 *p = ExtensionMsg_PermissionSetStruct();
1076 return true;
1077 }
1078 };
1079
1080 template <>
955 struct GenerateTraits<extensions::URLPatternSet> { 1081 struct GenerateTraits<extensions::URLPatternSet> {
956 static bool Generate(extensions::URLPatternSet* p, Generator* generator) { 1082 static bool Generate(extensions::URLPatternSet* p, Generator* generator) {
957 std::set<URLPattern> patterns; 1083 std::set<URLPattern> patterns;
958 if (!GenerateParam(&patterns, generator)) 1084 if (!GenerateParam(&patterns, generator))
959 return false; 1085 return false;
960 *p = extensions::URLPatternSet(patterns); 1086 *p = extensions::URLPatternSet(patterns);
961 return true; 1087 return true;
962 } 1088 }
963 }; 1089 };
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 1090
1146 template <> 1091 template <>
1147 struct GenerateTraits<gfx::Point> { 1092 struct GenerateTraits<gfx::Point> {
1148 static bool Generate(gfx::Point *p, Generator* generator) { 1093 static bool Generate(gfx::Point *p, Generator* generator) {
1149 int x; 1094 int x;
1150 int y; 1095 int y;
1151 if (!GenerateParam(&x, generator)) 1096 if (!GenerateParam(&x, generator))
1152 return false; 1097 return false;
1153 if (!GenerateParam(&y, generator)) 1098 if (!GenerateParam(&y, generator))
1154 return false; 1099 return false;
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1279 if (!GenerateParam(&x, generator)) 1224 if (!GenerateParam(&x, generator))
1280 return false; 1225 return false;
1281 if (!GenerateParam(&y, generator)) 1226 if (!GenerateParam(&y, generator))
1282 return false; 1227 return false;
1283 *p = gfx::Vector2dF(x, y); 1228 *p = gfx::Vector2dF(x, y);
1284 return true; 1229 return true;
1285 } 1230 }
1286 }; 1231 };
1287 1232
1288 template <> 1233 template <>
1234 struct GenerateTraits<gpu::Mailbox> {
1235 static bool Generate(gpu::Mailbox* p, Generator* generator) {
1236 generator->GenerateBytes(p->name, sizeof(p->name));
1237 return true;
1238 }
1239 };
1240
1241 template <>
1242 struct GenerateTraits<gpu::MailboxHolder> {
1243 static bool Generate(gpu::MailboxHolder* p, Generator* generator) {
1244 gpu::Mailbox mailbox;
1245 uint32_t texture_target;
1246 uint32_t sync_point;
1247 if (!GenerateParam(&mailbox, generator))
1248 return false;
1249 if (!GenerateParam(&texture_target, generator))
1250 return false;
1251 if (!GenerateParam(&sync_point, generator))
1252 return false;
1253 *p = gpu::MailboxHolder(mailbox, texture_target, sync_point);
1254 return true;
1255 }
1256 };
1257
1258 template <>
1259 struct GenerateTraits<gpu::ValueState> {
1260 static bool Generate(gpu::ValueState* p, Generator* generator) {
1261 gpu::ValueState state;
1262 if (!GenerateParamArray(&state.float_value[0], 4, generator))
1263 return false;
1264 if (!GenerateParamArray(&state.int_value[0], 4, generator))
1265 return false;
1266 *p = state;
1267 return true;
1268 }
1269 };
1270
1271 template <>
1272 struct GenerateTraits<GURL> {
1273 static bool Generate(GURL* p, Generator* generator) {
1274 const char url_chars[] = "Ahtp0:/.?+\\%&#";
1275 size_t count = RandInRange(100);
1276 std::string random_url;
1277 for (size_t i = 0; i < count; ++i)
1278 random_url += url_chars[RandInRange(sizeof(url_chars) - 1)];
1279 int selector = RandInRange(10);
1280 if (selector == 0)
1281 random_url = std::string("http://") + random_url;
1282 else if (selector == 1)
1283 random_url = std::string("file://") + random_url;
1284 else if (selector == 2)
1285 random_url = std::string("javascript:") + random_url;
1286 else if (selector == 2)
1287 random_url = std::string("data:") + random_url;
1288 *p = GURL(random_url);
1289 return true;
1290 }
1291 };
1292
1293 template <>
1289 struct GenerateTraits<IPC::Message> { 1294 struct GenerateTraits<IPC::Message> {
1290 static bool Generate(IPC::Message *p, Generator* generator) { 1295 static bool Generate(IPC::Message *p, Generator* generator) {
1291 if (g_function_vector.empty()) 1296 if (g_function_vector.empty())
1292 return false; 1297 return false;
1293 size_t index = RandInRange(g_function_vector.size()); 1298 size_t index = RandInRange(g_function_vector.size());
1294 IPC::Message* ipc_message = (*g_function_vector[index])(generator); 1299 IPC::Message* ipc_message = (*g_function_vector[index])(generator);
1295 if (!ipc_message) 1300 if (!ipc_message)
1296 return false; 1301 return false;
1297 p = ipc_message; 1302 p = ipc_message;
1298 return true; 1303 return true;
(...skipping 19 matching lines...) Expand all
1318 p->pipe = IPC::ChannelHandle::PipeHandle(fake_handle); 1323 p->pipe = IPC::ChannelHandle::PipeHandle(fake_handle);
1319 return true; 1324 return true;
1320 #elif defined(OS_POSIX) 1325 #elif defined(OS_POSIX)
1321 return 1326 return
1322 GenerateParam(&p->name, generator) && 1327 GenerateParam(&p->name, generator) &&
1323 GenerateParam(&p->socket, generator); 1328 GenerateParam(&p->socket, generator);
1324 #endif 1329 #endif
1325 } 1330 }
1326 }; 1331 };
1327 1332
1333 template <>
1334 struct GenerateTraits<media::AudioParameters> {
1335 static bool Generate(media::AudioParameters* p, Generator* generator) {
1336 int format;
1337 int channel_layout;
1338 int sample_rate;
1339 int bits_per_sample;
1340 int frames_per_buffer;
1341 int channels;
1342 int effects;
1343 if (!GenerateParam(&format, generator))
1344 return false;
1345 if (!GenerateParam(&channel_layout, generator))
1346 return false;
1347 if (!GenerateParam(&sample_rate, generator))
1348 return false;
1349 if (!GenerateParam(&bits_per_sample, generator))
1350 return false;
1351 if (!GenerateParam(&frames_per_buffer, generator))
1352 return false;
1353 if (!GenerateParam(&channels, generator))
1354 return false;
1355 if (!GenerateParam(&effects, generator))
1356 return false;
1357 media::AudioParameters params(
1358 static_cast<media::AudioParameters::Format>(format),
1359 static_cast<media::ChannelLayout>(channel_layout), channels,
1360 sample_rate, bits_per_sample, frames_per_buffer, effects);
1361 *p = params;
1362 return true;
1363 }
1364 };
1365
1366 template <>
1367 struct GenerateTraits<media::VideoCaptureFormat> {
1368 static bool Generate(media::VideoCaptureFormat* p, Generator* generator) {
1369 int frame_size_width;
1370 int frame_size_height;
1371 int pixel_format;
1372 if (!GenerateParam(&frame_size_height, generator))
1373 return false;
1374 if (!GenerateParam(&frame_size_width, generator))
1375 return false;
1376 if (!GenerateParam(&pixel_format, generator))
1377 return false;
1378 if (!GenerateParam(&p->frame_rate, generator))
1379 return false;
1380 p->frame_size.SetSize(frame_size_width, frame_size_height);
1381 p->pixel_format = static_cast<media::VideoPixelFormat>(pixel_format);
1382 return true;
1383 }
1384 };
1385
1386 template <>
1387 struct GenerateTraits<net::LoadTimingInfo> {
1388 static bool Generate(net::LoadTimingInfo* p, Generator* generator) {
1389 return GenerateParam(&p->socket_log_id, generator) &&
1390 GenerateParam(&p->socket_reused, generator) &&
1391 GenerateParam(&p->request_start_time, generator) &&
1392 GenerateParam(&p->request_start, generator) &&
1393 GenerateParam(&p->proxy_resolve_start, generator) &&
1394 GenerateParam(&p->proxy_resolve_end, generator) &&
1395 GenerateParam(&p->connect_timing.dns_start, generator) &&
1396 GenerateParam(&p->connect_timing.dns_end, generator) &&
1397 GenerateParam(&p->connect_timing.connect_start, generator) &&
1398 GenerateParam(&p->connect_timing.connect_end, generator) &&
1399 GenerateParam(&p->connect_timing.ssl_start, generator) &&
1400 GenerateParam(&p->connect_timing.ssl_end, generator) &&
1401 GenerateParam(&p->send_start, generator) &&
1402 GenerateParam(&p->send_end, generator) &&
1403 GenerateParam(&p->receive_headers_end, generator);
1404 }
1405 };
1406
1407 template <>
1408 struct GenerateTraits<net::HostPortPair> {
1409 static bool Generate(net::HostPortPair* p, Generator* generator) {
1410 std::string host;
1411 uint16 port;
1412 if (!GenerateParam(&host, generator))
1413 return false;
1414 if (!GenerateParam(&port, generator))
1415 return false;
1416 p->set_host(host);
1417 p->set_port(port);
1418 return true;
1419 }
1420 };
1421
1422 template <>
1423 struct GenerateTraits<net::IPEndPoint> {
1424 static bool Generate(net::IPEndPoint* p, Generator* generator) {
1425 net::IPAddressNumber address;
1426 int port;
1427 if (!GenerateParam(&address, generator))
1428 return false;
1429 if (!GenerateParam(&port, generator))
1430 return false;
1431 net::IPEndPoint ip_endpoint(address, port);
1432 *p = ip_endpoint;
1433 return true;
1434 }
1435 };
1436
1437 template <>
1438 struct GenerateTraits<network_hints::LookupRequest> {
1439 static bool Generate(network_hints::LookupRequest* p, Generator* generator) {
1440 network_hints::LookupRequest request;
1441 if (!GenerateParam(&request.hostname_list, generator))
1442 return false;
1443 *p = request;
1444 return true;
1445 }
1446 };
1447
1328 // PP_ traits. 1448 // PP_ traits.
1329 template <> 1449 template <>
1330 struct GenerateTraits<PP_Bool> { 1450 struct GenerateTraits<PP_Bool> {
1331 static bool Generate(PP_Bool *p, Generator* generator) { 1451 static bool Generate(PP_Bool *p, Generator* generator) {
1332 bool tmp; 1452 bool tmp;
1333 if (!GenerateParam(&tmp, generator)) 1453 if (!GenerateParam(&tmp, generator))
1334 return false; 1454 return false;
1335 *p = PP_FromBool(tmp); 1455 *p = PP_FromBool(tmp);
1336 return true; 1456 return true;
1337 } 1457 }
1338 }; 1458 };
1339 1459
1340 template <> 1460 template <>
1461 struct GenerateTraits<PP_KeyInformation> {
1462 static bool Generate(PP_KeyInformation* p, Generator* generator) {
1463 // TODO(mbarbella): This should actually generate something.
1464 *p = PP_KeyInformation();
1465 return true;
1466 }
1467 };
1468
1469 template <>
1341 struct GenerateTraits<PP_NetAddress_Private> { 1470 struct GenerateTraits<PP_NetAddress_Private> {
1342 static bool Generate(PP_NetAddress_Private *p, Generator* generator) { 1471 static bool Generate(PP_NetAddress_Private *p, Generator* generator) {
1343 p->size = RandInRange(sizeof(p->data) + 1); 1472 p->size = RandInRange(sizeof(p->data) + 1);
1344 generator->GenerateBytes(&p->data, p->size); 1473 generator->GenerateBytes(&p->data, p->size);
1345 return true; 1474 return true;
1346 } 1475 }
1347 }; 1476 };
1348 1477
1349 template <> 1478 template <>
1479 struct GenerateTraits<ppapi::PPB_X509Certificate_Fields> {
1480 static bool Generate(ppapi::PPB_X509Certificate_Fields* p,
1481 Generator* generator) {
1482 // TODO(mbarbella): This should actually generate something.
1483 return true;
1484 }
1485 };
1486
1487 template <>
1488 struct GenerateTraits<ppapi::proxy::PPBFlash_DrawGlyphs_Params> {
1489 static bool Generate(ppapi::proxy::PPBFlash_DrawGlyphs_Params* p,
1490 Generator* generator) {
1491 // TODO(mbarbella): This should actually generate something.
1492 *p = ppapi::proxy::PPBFlash_DrawGlyphs_Params();
1493 return true;
1494 }
1495 };
1496
1497 template <>
1350 struct GenerateTraits<ppapi::proxy::ResourceMessageCallParams> { 1498 struct GenerateTraits<ppapi::proxy::ResourceMessageCallParams> {
1351 static bool Generate( 1499 static bool Generate(
1352 ppapi::proxy::ResourceMessageCallParams *p, Generator* generator) { 1500 ppapi::proxy::ResourceMessageCallParams *p, Generator* generator) {
1353 PP_Resource resource; 1501 PP_Resource resource;
1354 int32_t sequence; 1502 int32_t sequence;
1355 bool has_callback; 1503 bool has_callback;
1356 if (!GenerateParam(&resource, generator)) 1504 if (!GenerateParam(&resource, generator))
1357 return false; 1505 return false;
1358 if (!GenerateParam(&sequence, generator)) 1506 if (!GenerateParam(&sequence, generator))
1359 return false; 1507 return false;
(...skipping 19 matching lines...) Expand all
1379 return false; 1527 return false;
1380 if (!GenerateParam(&result, generator)) 1528 if (!GenerateParam(&result, generator))
1381 return false; 1529 return false;
1382 *p = ppapi::proxy::ResourceMessageReplyParams(resource, sequence); 1530 *p = ppapi::proxy::ResourceMessageReplyParams(resource, sequence);
1383 p->set_result(result); 1531 p->set_result(result);
1384 return true; 1532 return true;
1385 } 1533 }
1386 }; 1534 };
1387 1535
1388 template <> 1536 template <>
1537 struct GenerateTraits<ppapi::proxy::SerializedHandle> {
1538 static bool Generate(ppapi::proxy::SerializedHandle* p,
1539 Generator* generator) {
1540 // TODO(mbarbella): This should actually generate something.
1541 *p = ppapi::proxy::SerializedHandle();
1542 return true;
1543 }
1544 };
1545
1546 template <>
1547 struct GenerateTraits<ppapi::proxy::SerializedFontDescription> {
1548 static bool Generate(ppapi::proxy::SerializedFontDescription* p,
1549 Generator* generator) {
1550 // TODO(mbarbella): This should actually generate something.
1551 *p = ppapi::proxy::SerializedFontDescription();
1552 return true;
1553 }
1554 };
1555
1556 template <>
1557 struct GenerateTraits<ppapi::proxy::SerializedTrueTypeFontDesc> {
1558 static bool Generate(ppapi::proxy::SerializedTrueTypeFontDesc* p,
1559 Generator* generator) {
1560 // TODO(mbarbella): This should actually generate something.
1561 *p = ppapi::proxy::SerializedTrueTypeFontDesc();
1562 return true;
1563 }
1564 };
1565
1566 template <>
1567 struct GenerateTraits<ppapi::proxy::SerializedVar> {
1568 static bool Generate(ppapi::proxy::SerializedVar* p, Generator* generator) {
1569 // TODO(mbarbella): This should actually generate something.
1570 *p = ppapi::proxy::SerializedVar();
1571 return true;
1572 }
1573 };
1574
1575 template <>
1389 struct GenerateTraits<ppapi::HostResource> { 1576 struct GenerateTraits<ppapi::HostResource> {
1390 static bool Generate(ppapi::HostResource *p, Generator* generator) { 1577 static bool Generate(ppapi::HostResource *p, Generator* generator) {
1391 PP_Instance instance; 1578 PP_Instance instance;
1392 PP_Resource resource; 1579 PP_Resource resource;
1393 if (!GenerateParam(&instance, generator)) 1580 if (!GenerateParam(&instance, generator))
1394 return false; 1581 return false;
1395 if (!GenerateParam(&resource, generator)) 1582 if (!GenerateParam(&resource, generator))
1396 return false; 1583 return false;
1397 p->SetHostResource(instance, resource); 1584 p->SetHostResource(instance, resource);
1398 return true; 1585 return true;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1459 webrtc::DesktopVector vector; 1646 webrtc::DesktopVector vector;
1460 if (!GenerateParam(&size, generator)) 1647 if (!GenerateParam(&size, generator))
1461 return false; 1648 return false;
1462 if (!GenerateParam(&vector, generator)) 1649 if (!GenerateParam(&vector, generator))
1463 return false; 1650 return false;
1464 *p = remoting::ScreenResolution(size, vector); 1651 *p = remoting::ScreenResolution(size, vector);
1465 return true; 1652 return true;
1466 } 1653 }
1467 }; 1654 };
1468 1655
1469 // FIXME: Actually generate something.
1470 template <> 1656 template <>
1471 struct GenerateTraits<SkBitmap> { 1657 struct GenerateTraits<SkBitmap> {
1472 static bool Generate(SkBitmap* p, Generator* generator) { 1658 static bool Generate(SkBitmap* p, Generator* generator) {
1659 // TODO(mbarbella): This should actually generate something.
1473 *p = SkBitmap(); 1660 *p = SkBitmap();
1474 return true; 1661 return true;
1475 } 1662 }
1476 }; 1663 };
1477 1664
1478 template <> 1665 template <>
1666 struct GenerateTraits<storage::DataElement> {
1667 static bool Generate(storage::DataElement* p, Generator* generator) {
1668 switch (RandInRange(4)) {
1669 case storage::DataElement::Type::TYPE_BYTES: {
1670 if (RandEvent(2)) {
1671 p->SetToEmptyBytes();
1672 } else {
1673 // TODO(mbarbella): Occasionally send more data here.
1674 char data[256];
1675 int data_len = RandInRange(sizeof(data));
1676 generator->GenerateBytes(&data[0], data_len);
1677 p->SetToBytes(&data[0], data_len);
1678 }
1679 return true;
1680 }
1681 case storage::DataElement::Type::TYPE_FILE: {
1682 base::FilePath path;
1683 uint64 offset;
1684 uint64 length;
1685 base::Time modification_time;
1686 if (!GenerateParam(&path, generator))
1687 return false;
1688 if (!GenerateParam(&offset, generator))
1689 return false;
1690 if (!GenerateParam(&length, generator))
1691 return false;
1692 if (!GenerateParam(&modification_time, generator))
1693 return false;
1694 p->SetToFilePathRange(path, offset, length, modification_time);
1695 return true;
1696 }
1697 case storage::DataElement::Type::TYPE_BLOB: {
1698 std::string uuid;
1699 uint64 offset;
1700 uint64 length;
1701 if (!GenerateParam(&uuid, generator))
1702 return false;
1703 if (!GenerateParam(&offset, generator))
1704 return false;
1705 if (!GenerateParam(&length, generator))
1706 return false;
1707 p->SetToBlobRange(uuid, offset, length);
1708 return true;
1709 }
1710 case storage::DataElement::Type::TYPE_FILE_FILESYSTEM: {
1711 GURL url;
1712 uint64 offset;
1713 uint64 length;
1714 base::Time modification_time;
1715 if (!GenerateParam(&url, generator))
1716 return false;
1717 if (!GenerateParam(&offset, generator))
1718 return false;
1719 if (!GenerateParam(&length, generator))
1720 return false;
1721 if (!GenerateParam(&modification_time, generator))
1722 return false;
1723 p->SetToFileSystemUrlRange(url, offset, length, modification_time);
1724 return true;
1725 }
1726 default: {
1727 NOTREACHED();
1728 return false;
1729 }
1730 }
1731 }
1732 };
1733
1734 template <>
1479 struct GenerateTraits<ui::LatencyInfo> { 1735 struct GenerateTraits<ui::LatencyInfo> {
1480 static bool Generate(ui::LatencyInfo* p, Generator* generator) { 1736 static bool Generate(ui::LatencyInfo* p, Generator* generator) {
1481 // TODO(inferno): Add param traits for |latency_components|. 1737 // TODO(inferno): Add param traits for |latency_components|.
1482 p->input_coordinates_size = static_cast<uint32>( 1738 p->input_coordinates_size = static_cast<uint32>(
1483 RandInRange(ui::LatencyInfo::kMaxInputCoordinates + 1)); 1739 RandInRange(ui::LatencyInfo::kMaxInputCoordinates + 1));
1484 if (!GenerateParamArray( 1740 if (!GenerateParamArray(
1485 &p->input_coordinates[0], p->input_coordinates_size, generator)) 1741 &p->input_coordinates[0], p->input_coordinates_size, generator))
1486 return false; 1742 return false;
1487 if (!GenerateParam(&p->trace_id, generator)) 1743 if (!GenerateParam(&p->trace_id, generator))
1488 return false; 1744 return false;
(...skipping 23 matching lines...) Expand all
1512 static bool Generate(url::Origin* p, Generator* generator) { 1768 static bool Generate(url::Origin* p, Generator* generator) {
1513 std::string origin; 1769 std::string origin;
1514 if (!GenerateParam(&origin, generator)) 1770 if (!GenerateParam(&origin, generator))
1515 return false; 1771 return false;
1516 *p = url::Origin(origin); 1772 *p = url::Origin(origin);
1517 return true; 1773 return true;
1518 } 1774 }
1519 }; 1775 };
1520 1776
1521 template <> 1777 template <>
1778 struct GenerateTraits<URLPattern> {
1779 static bool Generate(URLPattern* p, Generator* generator) {
1780 int valid_schemes;
1781 std::string host;
1782 std::string port;
1783 std::string path;
1784 if (!GenerateParam(&valid_schemes, generator))
1785 return false;
1786 if (!GenerateParam(&host, generator))
1787 return false;
1788 if (!GenerateParam(&port, generator))
1789 return false;
1790 if (!GenerateParam(&path, generator))
1791 return false;
1792 *p = URLPattern(valid_schemes);
1793 p->SetHost(host);
1794 p->SetPort(port);
1795 p->SetPath(path);
1796 return true;
1797 }
1798 };
1799
1800 template <>
1522 struct GenerateTraits<webrtc::DesktopSize> { 1801 struct GenerateTraits<webrtc::DesktopSize> {
1523 static bool Generate(webrtc::DesktopSize* p, Generator* generator) { 1802 static bool Generate(webrtc::DesktopSize* p, Generator* generator) {
1524 int32_t width; 1803 int32_t width;
1525 int32_t height; 1804 int32_t height;
1526 if (!GenerateParam(&width, generator)) 1805 if (!GenerateParam(&width, generator))
1527 return false; 1806 return false;
1528 if (!GenerateParam(&height, generator)) 1807 if (!GenerateParam(&height, generator))
1529 return false; 1808 return false;
1530 *p = webrtc::DesktopSize(width, height); 1809 *p = webrtc::DesktopSize(width, height);
1531 return true; 1810 return true;
(...skipping 27 matching lines...) Expand all
1559 return false; 1838 return false;
1560 if (!GenerateParam(&right, generator)) 1839 if (!GenerateParam(&right, generator))
1561 return false; 1840 return false;
1562 if (!GenerateParam(&bottom, generator)) 1841 if (!GenerateParam(&bottom, generator))
1563 return false; 1842 return false;
1564 *p = webrtc::DesktopRect::MakeLTRB(left, top, right, bottom); 1843 *p = webrtc::DesktopRect::MakeLTRB(left, top, right, bottom);
1565 return true; 1844 return true;
1566 } 1845 }
1567 }; 1846 };
1568 1847
1848 template <>
1849 struct GenerateTraits<webrtc::MouseCursor> {
1850 static bool Generate(webrtc::MouseCursor* p, Generator* generator) {
1851 webrtc::DesktopVector hotspot;
1852 if (!GenerateParam(&hotspot, generator))
1853 return false;
1854 // Using a small size here to avoid OOM or overflow on image allocation.
1855 webrtc::DesktopSize size(RandInRange(100), RandInRange(100));
1856 p->set_image(new webrtc::BasicDesktopFrame(size));
1857 p->set_hotspot(hotspot);
1858 return true;
1859 }
1860 };
1861
1569 // Redefine macros to generate generating from traits declarations. 1862 // Redefine macros to generate generating from traits declarations.
1570 // STRUCT declarations cause corresponding STRUCT_TRAITS declarations to occur. 1863 // STRUCT declarations cause corresponding STRUCT_TRAITS declarations to occur.
1571 #undef IPC_STRUCT_BEGIN 1864 #undef IPC_STRUCT_BEGIN
1572 #undef IPC_STRUCT_BEGIN_WITH_PARENT 1865 #undef IPC_STRUCT_BEGIN_WITH_PARENT
1573 #undef IPC_STRUCT_MEMBER 1866 #undef IPC_STRUCT_MEMBER
1574 #undef IPC_STRUCT_END 1867 #undef IPC_STRUCT_END
1575 #define IPC_STRUCT_BEGIN_WITH_PARENT(struct_name, parent) \ 1868 #define IPC_STRUCT_BEGIN_WITH_PARENT(struct_name, parent) \
1576 IPC_STRUCT_BEGIN(struct_name) 1869 IPC_STRUCT_BEGIN(struct_name)
1577 #define IPC_STRUCT_BEGIN(struct_name) IPC_STRUCT_TRAITS_BEGIN(struct_name) 1870 #define IPC_STRUCT_BEGIN(struct_name) IPC_STRUCT_TRAITS_BEGIN(struct_name)
1578 #define IPC_STRUCT_MEMBER(type, name, ...) IPC_STRUCT_TRAITS_MEMBER(name) 1871 #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; 2064 return EXIT_FAILURE;
1772 2065
1773 return EXIT_SUCCESS; 2066 return EXIT_SUCCESS;
1774 } 2067 }
1775 2068
1776 } // namespace ipc_fuzzer 2069 } // namespace ipc_fuzzer
1777 2070
1778 int main(int argc, char** argv) { 2071 int main(int argc, char** argv) {
1779 return ipc_fuzzer::GenerateMain(argc, argv); 2072 return ipc_fuzzer::GenerateMain(argc, argv);
1780 } 2073 }
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