diff options
| author | Sebastian Pop <s.pop@samsung.com> | 2018-11-15 14:31:43 -0600 |
|---|---|---|
| committer | Hans Kristian Rosbach <hk-github@circlestorm.org> | 2018-12-08 12:36:30 +0100 |
| commit | 6f0b2031e755564a8da5b15e639852cd45f4ac92 (patch) | |
| tree | df34473d815050710cc5c35d3c1f21038164dc76 /test/fuzz | |
| parent | cc36e352bafd42a2cddffdff926acdbe448da89f (diff) | |
| download | Project-Tick-6f0b2031e755564a8da5b15e639852cd45f4ac92.tar.gz Project-Tick-6f0b2031e755564a8da5b15e639852cd45f4ac92.zip | |
add test/fuzz for fast crc32
Diffstat (limited to 'test/fuzz')
| -rw-r--r-- | test/fuzz/checksum_fuzzer.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/test/fuzz/checksum_fuzzer.c b/test/fuzz/checksum_fuzzer.c index e7003dd8c6..10fc138fb8 100644 --- a/test/fuzz/checksum_fuzzer.c +++ b/test/fuzz/checksum_fuzzer.c @@ -14,13 +14,16 @@ #endif int LLVMFuzzerTestOneInput(const uint8_t *data, size_t dataLen) { - uint32_t crc1 = PREFIX(crc32)(0L, NULL, 0); - uint32_t crc2 = PREFIX(crc32)(0L, NULL, 0); - uint32_t adler1 = PREFIX(adler32)(0L, NULL, 0); - uint32_t adler2 = PREFIX(adler32)(0L, NULL, 0);; + uint32_t crc0 = PREFIX(crc32)(0L, NULL, 0); + uint32_t crc1 = crc0; + uint32_t crc2 = crc0; + uint32_t adler0 = PREFIX(adler32)(0L, NULL, 0); + uint32_t adler1 = adler0; + uint32_t adler2 = adler0; /* Checksum with a buffer of size equal to the first byte in the input. */ uint32_t buffSize = data[0]; uint32_t offset = 0; + uint32_t op[32]; /* Discard inputs larger than 1Mb. */ static size_t kMaxSize = 1024 * 1024; @@ -32,8 +35,13 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t dataLen) { ++buffSize; /* CRC32 */ - for (offset = 0; offset + buffSize <= dataLen; offset += buffSize) + PREFIX(crc32_combine_gen)(op, buffSize); + for (offset = 0; offset + buffSize <= dataLen; offset += buffSize) { + uint32_t crc3 = PREFIX(crc32_z)(crc0, data + offset, buffSize); + uint32_t crc4 = PREFIX(crc32_combine_op)(crc1, crc3, op); crc1 = PREFIX(crc32_z)(crc1, data + offset, buffSize); + assert(crc1 == crc4); + } crc1 = PREFIX(crc32_z)(crc1, data + offset, dataLen % buffSize); crc2 = PREFIX(crc32_z)(crc2, data, dataLen); @@ -42,6 +50,13 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t dataLen) { assert(PREFIX(crc32_combine)(crc1, crc2, dataLen) == PREFIX(crc32_combine)(crc1, crc1, dataLen)); + /* Fast CRC32 combine. */ + PREFIX(crc32_combine_gen)(op, dataLen); + assert(PREFIX(crc32_combine_op)(crc1, crc2, op) == + PREFIX(crc32_combine_op)(crc2, crc1, op)); + assert(PREFIX(crc32_combine)(crc1, crc2, dataLen) == + PREFIX(crc32_combine_op)(crc2, crc1, op)); + /* Adler32 */ for (offset = 0; offset + buffSize <= dataLen; offset += buffSize) adler1 = PREFIX(adler32_z)(adler1, data + offset, buffSize); |
