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

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

Issue 873253004: Add IPC fuzzer GenerateTraits for some cc types. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments 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 | tools/ipc_fuzzer/mutate/rand_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 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 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 GenerateParam(&get<2>(*p), generator) && 393 GenerateParam(&get<2>(*p), generator) &&
394 GenerateParam(&get<3>(*p), generator) && 394 GenerateParam(&get<3>(*p), generator) &&
395 GenerateParam(&get<4>(*p), generator); 395 GenerateParam(&get<4>(*p), generator);
396 } 396 }
397 }; 397 };
398 398
399 // Specializations to generate containers. 399 // Specializations to generate containers.
400 template <class A> 400 template <class A>
401 struct GenerateTraits<std::vector<A> > { 401 struct GenerateTraits<std::vector<A> > {
402 static bool Generate(std::vector<A>* p, Generator* generator) { 402 static bool Generate(std::vector<A>* p, Generator* generator) {
403 size_t count = ++g_depth > 3 ? 0 : RandInRange(20); 403 size_t count = ++g_depth > 3 ? 0 : RandElementCount();
404 p->resize(count); 404 p->resize(count);
405 for (size_t i = 0; i < count; ++i) { 405 for (size_t i = 0; i < count; ++i) {
406 if (!GenerateParam(&p->at(i), generator)) { 406 if (!GenerateParam(&p->at(i), generator)) {
407 --g_depth; 407 --g_depth;
408 return false; 408 return false;
409 } 409 }
410 } 410 }
411 --g_depth; 411 --g_depth;
412 return true; 412 return true;
413 } 413 }
414 }; 414 };
415 415
416 template <class A> 416 template <class A>
417 struct GenerateTraits<std::set<A> > { 417 struct GenerateTraits<std::set<A> > {
418 static bool Generate(std::set<A>* p, Generator* generator) { 418 static bool Generate(std::set<A>* p, Generator* generator) {
419 static int g_depth = 0; 419 static int g_depth = 0;
420 size_t count = ++g_depth > 3 ? 0 : RandInRange(20); 420 size_t count = ++g_depth > 3 ? 0 : RandElementCount();
421 A a; 421 A a;
422 for (size_t i = 0; i < count; ++i) { 422 for (size_t i = 0; i < count; ++i) {
423 if (!GenerateParam(&a, generator)) { 423 if (!GenerateParam(&a, generator)) {
424 --g_depth; 424 --g_depth;
425 return false; 425 return false;
426 } 426 }
427 p->insert(a); 427 p->insert(a);
428 } 428 }
429 --g_depth; 429 --g_depth;
430 return true; 430 return true;
431 } 431 }
432 }; 432 };
433 433
434 434
435 template <class A, class B> 435 template <class A, class B>
436 struct GenerateTraits<std::map<A, B> > { 436 struct GenerateTraits<std::map<A, B> > {
437 static bool Generate(std::map<A, B>* p, Generator* generator) { 437 static bool Generate(std::map<A, B>* p, Generator* generator) {
438 static int g_depth = 0; 438 static int g_depth = 0;
439 size_t count = ++g_depth > 3 ? 0 : RandInRange(10); 439 size_t count = ++g_depth > 3 ? 0 : RandElementCount();
440 std::pair<A, B> place_holder; 440 std::pair<A, B> place_holder;
441 for (size_t i = 0; i < count; ++i) { 441 for (size_t i = 0; i < count; ++i) {
442 if (!GenerateParam(&place_holder, generator)) { 442 if (!GenerateParam(&place_holder, generator)) {
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;
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 return false; 702 return false;
703 if (!GenerateParam(&value, generator)) 703 if (!GenerateParam(&value, generator))
704 return false; 704 return false;
705 *p = blink::WebGamepadButton(pressed, value); 705 *p = blink::WebGamepadButton(pressed, value);
706 return true; 706 return true;
707 } 707 }
708 }; 708 };
709 709
710 template <> 710 template <>
711 struct GenerateTraits<cc::CompositorFrame> { 711 struct GenerateTraits<cc::CompositorFrame> {
712 // FIXME: this should actually generate something
713 static bool Generate(cc::CompositorFrame* p, Generator* generator) { 712 static bool Generate(cc::CompositorFrame* p, Generator* generator) {
713 if (!GenerateParam(&p->metadata, generator))
714 return false;
715 switch (RandInRange(4)) {
716 case 0: {
717 p->delegated_frame_data.reset(new cc::DelegatedFrameData());
718 if (!GenerateParam(p->delegated_frame_data.get(), generator))
719 return false;
720 return true;
721 }
722 case 1: {
723 p->gl_frame_data.reset(new cc::GLFrameData());
724 if (!GenerateParam(p->gl_frame_data.get(), generator))
725 return false;
726 return true;
727 }
728 case 2: {
729 p->software_frame_data.reset(new cc::SoftwareFrameData());
730 if (!GenerateParam(p->software_frame_data.get(), generator))
731 return false;
732 return true;
733 }
734 default:
735 // Generate nothing to handle the no frame case.
736 return true;
737 }
738 }
739 };
740
741 template <>
742 struct GenerateTraits<cc::CompositorFrameAck> {
743 static bool Generate(cc::CompositorFrameAck* p, Generator* generator) {
744 if (!GenerateParam(&p->resources, generator))
745 return false;
746 if (!GenerateParam(&p->last_software_frame_id, generator))
747 return false;
748 p->gl_frame_data.reset(new cc::GLFrameData);
749 if (!GenerateParam(p->gl_frame_data.get(), generator))
750 return false;
714 return true; 751 return true;
715 } 752 }
716 }; 753 };
717 754
718 template <> 755 template <>
719 struct GenerateTraits<cc::CompositorFrameAck> { 756 struct GenerateTraits<cc::DelegatedFrameData> {
720 // FIXME: this should actually generate something 757 static bool Generate(cc::DelegatedFrameData* p, Generator* generator) {
721 static bool Generate(cc::CompositorFrameAck* p, Generator* generator) { 758 if (!GenerateParam(&p->device_scale_factor, generator))
759 return false;
760 if (!GenerateParam(&p->resource_list, generator))
761 return false;
762 if (!GenerateParam(&p->render_pass_list, generator))
763 return false;
722 return true; 764 return true;
723 } 765 }
724 }; 766 };
767
768 template <class A>
769 struct GenerateTraits<cc::ListContainer<A>> {
770 static bool Generate(cc::ListContainer<A>* p, Generator* generator) {
771 // TODO(mbarbella): This should actually generate something.
772 return true;
773 }
774 };
775
776 template <>
777 struct GenerateTraits<cc::QuadList> {
778 static bool Generate(cc::QuadList* p, Generator* generator) {
779 // TODO(mbarbella): This should actually generate something.
780 return true;
781 }
782 };
783
784 template <>
785 struct GenerateTraits<cc::RenderPass> {
786 static bool Generate(cc::RenderPass* p, Generator* generator) {
787 if (!GenerateParam(&p->id, generator))
788 return false;
789 if (!GenerateParam(&p->output_rect, generator))
790 return false;
791 if (!GenerateParam(&p->damage_rect, generator))
792 return false;
793 if (!GenerateParam(&p->transform_to_root_target, generator))
794 return false;
795 if (!GenerateParam(&p->has_transparent_background, generator))
796 return false;
797 if (!GenerateParam(&p->quad_list, generator))
798 return false;
799 if (!GenerateParam(&p->shared_quad_state_list, generator))
800 return false;
801 // Omitting |copy_requests| as it is not sent over IPC.
802 return true;
803 }
804 };
805
806 template <>
807 struct GenerateTraits<cc::RenderPassList> {
808 static bool Generate(cc::RenderPassList* p, Generator* generator) {
809 size_t count = RandElementCount();
810 for (size_t i = 0; i < count; ++i) {
811 scoped_ptr<cc::RenderPass> render_pass = cc::RenderPass::Create();
812 if (!GenerateParam(render_pass.get(), generator))
813 return false;
814 p->push_back(render_pass.Pass());
815 }
816 return true;
817 }
818 };
819
820 template <>
821 struct GenerateTraits<cc::SoftwareFrameData> {
822 static bool Generate(cc::SoftwareFrameData* p, Generator* generator) {
823 if (!GenerateParam(&p->id, generator))
824 return false;
825 if (!GenerateParam(&p->size, generator))
826 return false;
827 if (!GenerateParam(&p->damage_rect, generator))
828 return false;
829 if (!GenerateParam(&p->bitmap_id, generator))
830 return false;
831 return true;
832 }
833 };
725 834
726 template <> 835 template <>
727 struct GenerateTraits<content::IndexedDBKey> { 836 struct GenerateTraits<content::IndexedDBKey> {
728 static bool Generate(content::IndexedDBKey* p, Generator* generator) { 837 static bool Generate(content::IndexedDBKey* p, Generator* generator) {
729 ++g_depth; 838 ++g_depth;
730 blink::WebIDBKeyType web_type = 839 blink::WebIDBKeyType web_type =
731 static_cast<blink::WebIDBKeyType>(RandInRange(7)); 840 static_cast<blink::WebIDBKeyType>(RandInRange(7));
732 switch (web_type) 841 switch (web_type)
733 { 842 {
734 case blink::WebIDBKeyTypeArray: { 843 case blink::WebIDBKeyTypeArray: {
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
1056 if (!GenerateParam(&x, generator)) 1165 if (!GenerateParam(&x, generator))
1057 return false; 1166 return false;
1058 if (!GenerateParam(&y, generator)) 1167 if (!GenerateParam(&y, generator))
1059 return false; 1168 return false;
1060 p->SetPoint(x, y); 1169 p->SetPoint(x, y);
1061 return true; 1170 return true;
1062 } 1171 }
1063 }; 1172 };
1064 1173
1065 template <> 1174 template <>
1066 struct GenerateTraits<gfx::Size> {
1067 static bool Generate(gfx::Size *p, Generator* generator) {
1068 int w;
1069 int h;
1070 if (!GenerateParam(&w, generator))
1071 return false;
1072 if (!GenerateParam(&h, generator))
1073 return false;
1074 p->SetSize(w, h);
1075 return true;
1076 }
1077 };
1078
1079 template <>
1080 struct GenerateTraits<gfx::SizeF> {
1081 static bool Generate(gfx::SizeF *p, Generator* generator) {
1082 float w;
1083 float h;
1084 if (!GenerateParam(&w, generator))
1085 return false;
1086 if (!GenerateParam(&h, generator))
1087 return false;
1088 p->SetSize(w, h);
1089 return true;
1090 }
1091 };
1092
1093 template <>
1094 struct GenerateTraits<gfx::Rect> { 1175 struct GenerateTraits<gfx::Rect> {
1095 static bool Generate(gfx::Rect *p, Generator* generator) { 1176 static bool Generate(gfx::Rect *p, Generator* generator) {
1096 gfx::Point origin; 1177 gfx::Point origin;
1097 gfx::Size size; 1178 gfx::Size size;
1098 if (!GenerateParam(&origin, generator)) 1179 if (!GenerateParam(&origin, generator))
1099 return false; 1180 return false;
1100 if (!GenerateParam(&size, generator)) 1181 if (!GenerateParam(&size, generator))
1101 return false; 1182 return false;
1102 p->set_origin(origin); 1183 p->set_origin(origin);
1103 p->set_size(size); 1184 p->set_size(size);
(...skipping 24 matching lines...) Expand all
1128 if (!GenerateParam(&start, generator)) 1209 if (!GenerateParam(&start, generator))
1129 return false; 1210 return false;
1130 if (!GenerateParam(&end, generator)) 1211 if (!GenerateParam(&end, generator))
1131 return false; 1212 return false;
1132 *p = gfx::Range(start, end); 1213 *p = gfx::Range(start, end);
1133 return true; 1214 return true;
1134 } 1215 }
1135 }; 1216 };
1136 1217
1137 template <> 1218 template <>
1219 struct GenerateTraits<gfx::Size> {
1220 static bool Generate(gfx::Size* p, Generator* generator) {
1221 int w;
1222 int h;
1223 if (!GenerateParam(&w, generator))
1224 return false;
1225 if (!GenerateParam(&h, generator))
1226 return false;
1227 p->SetSize(w, h);
1228 return true;
1229 }
1230 };
1231
1232 template <>
1233 struct GenerateTraits<gfx::SizeF> {
1234 static bool Generate(gfx::SizeF* p, Generator* generator) {
1235 float w;
1236 float h;
1237 if (!GenerateParam(&w, generator))
1238 return false;
1239 if (!GenerateParam(&h, generator))
1240 return false;
1241 p->SetSize(w, h);
1242 return true;
1243 }
1244 };
1245
1246 template <>
1247 struct GenerateTraits<gfx::Transform> {
1248 static bool Generate(gfx::Transform* p, Generator* generator) {
1249 SkMScalar matrix[16];
1250 if (!GenerateParamArray(&matrix[0], arraysize(matrix), generator))
1251 return false;
1252 *p = gfx::Transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4],
1253 matrix[5], matrix[6], matrix[7], matrix[8], matrix[9],
1254 matrix[10], matrix[11], matrix[12], matrix[13],
1255 matrix[14], matrix[15]);
1256 return true;
1257 }
1258 };
1259
1260 template <>
1138 struct GenerateTraits<gfx::Vector2d> { 1261 struct GenerateTraits<gfx::Vector2d> {
1139 static bool Generate(gfx::Vector2d *p, Generator* generator) { 1262 static bool Generate(gfx::Vector2d *p, Generator* generator) {
1140 int x; 1263 int x;
1141 int y; 1264 int y;
1142 if (!GenerateParam(&x, generator)) 1265 if (!GenerateParam(&x, generator))
1143 return false; 1266 return false;
1144 if (!GenerateParam(&y, generator)) 1267 if (!GenerateParam(&y, generator))
1145 return false; 1268 return false;
1146 *p = gfx::Vector2d(x, y); 1269 *p = gfx::Vector2d(x, y);
1147 return true; 1270 return true;
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
1648 return EXIT_FAILURE; 1771 return EXIT_FAILURE;
1649 1772
1650 return EXIT_SUCCESS; 1773 return EXIT_SUCCESS;
1651 } 1774 }
1652 1775
1653 } // namespace ipc_fuzzer 1776 } // namespace ipc_fuzzer
1654 1777
1655 int main(int argc, char** argv) { 1778 int main(int argc, char** argv) {
1656 return ipc_fuzzer::GenerateMain(argc, argv); 1779 return ipc_fuzzer::GenerateMain(argc, argv);
1657 } 1780 }
OLDNEW
« no previous file with comments | « no previous file | tools/ipc_fuzzer/mutate/rand_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698