Changeset View
Changeset View
Standalone View
Standalone View
compiler-rt/test/fuzzer/SimpleCmpTest.cpp
Show All 12 Lines | |||||
bool PrintOnce(int Line) { | bool PrintOnce(int Line) { | ||||
if (!AllLines[Line]) | if (!AllLines[Line]) | ||||
fprintf(stderr, "Seen line %d\n", Line); | fprintf(stderr, "Seen line %d\n", Line); | ||||
AllLines[Line] = 1; | AllLines[Line] = 1; | ||||
return true; | return true; | ||||
} | } | ||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { | extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { | ||||
if (Size != 24) return 0; | if (Size != 21) | ||||
return 0; | |||||
uint64_t x = 0; | uint64_t x = 0; | ||||
int64_t y = 0; | int64_t y = 0; | ||||
int32_t z = 0; | int32_t z = 0; | ||||
uint32_t a = 0; | uint8_t a = 0; | ||||
memcpy(&x, Data, 8); // 8 | memcpy(&x, Data, 8); // 8 | ||||
memcpy(&y, Data + 8, 8); // 16 | memcpy(&y, Data + 8, 8); // 16 | ||||
memcpy(&z, Data + 16, sizeof(z)); // 20 | memcpy(&z, Data + 16, sizeof(z)); // 20 | ||||
memcpy(&a, Data + 20, sizeof(a)); // 24 | memcpy(&a, Data + 20, sizeof(a)); // 21 | ||||
const bool k32bit = sizeof(void*) == 4; | const bool k32bit = sizeof(void*) == 4; | ||||
if ((k32bit || x > 1234567890) && PrintOnce(__LINE__) && | if ((k32bit || x > 1234567890) && PrintOnce(__LINE__) && | ||||
(k32bit || x < 1234567895) && PrintOnce(__LINE__) && | (k32bit || x < 1234567895) && PrintOnce(__LINE__) && | ||||
a == 0x4242 && PrintOnce(__LINE__) && | a == 0x42 && PrintOnce(__LINE__) && | ||||
(k32bit || y >= 987654321) && PrintOnce(__LINE__) && | (k32bit || y >= 987654321) && PrintOnce(__LINE__) && | ||||
(k32bit || y <= 987654325) && PrintOnce(__LINE__) && | (k32bit || y <= 987654325) && PrintOnce(__LINE__) && | ||||
z < -10000 && PrintOnce(__LINE__) && | z < -10000 && PrintOnce(__LINE__) && | ||||
z >= -10005 && PrintOnce(__LINE__) && | z >= -10005 && PrintOnce(__LINE__) && | ||||
z != -10003 && PrintOnce(__LINE__) && | z != -10003 && PrintOnce(__LINE__) && | ||||
true) { | true) { | ||||
fprintf(stderr, "BINGO; Found the target: size %zd (%zd, %zd, %d, %d), exiting.\n", | fprintf(stderr, "BINGO; Found the target: size %zd (%zd, %zd, %d, %d), exiting.\n", | ||||
Size, x, y, z, a); | Size, x, y, z, a); | ||||
exit(1); | exit(1); | ||||
} | } | ||||
return 0; | return 0; | ||||
} | } | ||||
int AllLines[__LINE__ + 1]; // Must be the last line. | int AllLines[__LINE__ + 1]; // Must be the last line. |