@@ -11,44 +11,54 @@ TEST(ExploreCustomMutatorExampleChecks, DeveloperTest) {
1111 SpecialRequirementsStruct inputStruct = (SpecialRequirementsStruct) {.a =0 , .b = 10 , .c = 0 , .c_size = 0 };
1212 inputStruct.c = malloc (sizeof (" Developer" ));
1313 inputStruct.c_size = sizeof (" Developer" );
14- EXPECT_NO_THROW (ExploreCustomMutatorExampleChecks (inputStruct));
14+ EXPECT_NO_THROW (ExploreCustomMutatorExampleChecks (& inputStruct));
1515}
1616
1717TEST (ExploreStructuredInputChecks, MaintainerTest) {
1818 InputStrut inputStruct = (InputStruct) {.a =20 , .b = -10 , .c =0 };
1919 inputStruct.c = malloc (sizeof (" Maintainer" ));
2020 inputStruct.c_size = sizeof (" Maintainer" );
21- EXPECT_NO_THROW (ExploreCustomMutatorExampleChecks (inputStruct));
21+ EXPECT_NO_THROW (ExploreCustomMutatorExampleChecks (& inputStruct));
2222}
2323
2424#endif
2525
2626FUZZ_TEST (const uint8_t *data, size_t size) {
2727 SpecialRequirementsStruct* inputStruct = (SpecialRequirementsStruct*) data;
28- ExploreCustomMutatorExampleChecks (* inputStruct);
28+ ExploreCustomMutatorExampleChecks (inputStruct);
2929
3030 free (inputStruct->c );
3131}
3232
3333
3434extern " C" size_t LLVMFuzzerCustomMutator (uint8_t *data, size_t size,
3535 size_t maxSize, unsigned int seed) {
36+ std::cout << " In custom mutator.\n " ;
37+
3638 FuzzedDataProvider fdp (data, size);
3739 long a = fdp.ConsumeIntegral <long >();
3840 long b = fdp.ConsumeIntegral <long >();
39- const char * tempC = fdp.ConsumeRemainingBytesAsString (). c_str ();
40- size_t c_size= strlen (tempC) +1 ;
41+ std::string tempC = fdp.ConsumeRemainingBytesAsString ();
42+ size_t c_size= strlen (tempC. c_str () ) +1 ;
4143 char * c = (char *) malloc (c_size);
42- strncpy (c, tempC, c_size);
44+ strncpy (c, tempC. c_str () , c_size);
4345 SpecialRequirementsStruct specialRequirementsStruct = (SpecialRequirementsStruct) {
4446 .a = a, .b =b, .c_size =c_size, .c = c
4547 };
48+ size_t size1 = sizeof (specialRequirementsStruct);
49+
50+ if (maxSize >= size1) {
51+ free (data);
52+ data = (uint8_t *) malloc (size1);
53+ std::memcpy (data, &specialRequirementsStruct, size1);
54+ return sizeof (specialRequirementsStruct);
55+ } else {
56+ return maxSize;
57+ }
58+
59+
60+
4661
47- free (data);
48- data = (uint8_t *) malloc (sizeof (specialRequirementsStruct));
49- std::memcpy (data, &specialRequirementsStruct, sizeof (specialRequirementsStruct));
5062
51- std::cout << " In custom mutator.\n " ;
5263
53- return sizeof (specialRequirementsStruct);
5464}
0 commit comments