Skip to content

Commit 8ab143a

Browse files
committed
WIP custom mutator example
1 parent 0df10ce commit 8ab143a

File tree

4 files changed

+28
-17
lines changed

4 files changed

+28
-17
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ build
44
cmake-build-debug
55

66
/**/.cifuzz-*
7-
/**/*fuzzer_inputs
7+
/**/*fuzzer_inputs
8+
/**/*fuzz_test_inputs

src/explore_me/custom_mutator_example_checks_test.cpp

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

1717
TEST(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

2626
FUZZ_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

3434
extern "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
}

src/explore_me/explore_me.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ void ExploreStructuredInputChecks(InputStruct inputStruct){
4141
}
4242
}
4343

44-
void ExploreCustomMutatorExampleChecks(SpecialRequirementsStruct specialRequirementsStruct){
45-
strncpy(specialRequirementsStruct.c, "Hello", specialRequirementsStruct.c_size);
44+
void ExploreCustomMutatorExampleChecks(SpecialRequirementsStruct* specialRequirementsStruct){
45+
strncpy(specialRequirementsStruct->c, "Hello\0", specialRequirementsStruct->c_size);
4646

47-
if (insecureEncrypt(specialRequirementsStruct.a) == 0x4e9e91e6677cfff3L) {
48-
if (insecureEncrypt(specialRequirementsStruct.b) == 0x4f8b9fb34431d9d3L) {
47+
if (insecureEncrypt(specialRequirementsStruct->a) == 0x4e9e91e6677cfff3L) {
48+
if (insecureEncrypt(specialRequirementsStruct->b) == 0x4f8b9fb34431d9d3L) {
4949
trigger_memory_leak();
5050
}
5151
}

src/explore_me/explore_me.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,4 @@ void ExploreComplexChecks(long a, long b, std::string c);
2626

2727
void ExploreStructuredInputChecks(InputStruct inputStrut);
2828

29-
void ExploreCustomMutatorExampleChecks(SpecialRequirementsStruct specialRequirementsStruct);
29+
void ExploreCustomMutatorExampleChecks(SpecialRequirementsStruct* specialRequirementsStruct);

0 commit comments

Comments
 (0)