Some checks failed
sm-rpc / build (Debug, arm-linux-gnueabihf) (push) Successful in 1m34s
sm-rpc / build (Debug, aarch64-linux-gnu) (push) Successful in 2m46s
sm-rpc / build (Debug, host.gcc) (push) Failing after 1m28s
sm-rpc / build (Release, aarch64-linux-gnu) (push) Successful in 2m14s
sm-rpc / build (Release, arm-linux-gnueabihf) (push) Successful in 2m8s
sm-rpc / build (Debug, mipsel-linux-gnu) (push) Successful in 5m35s
sm-rpc / build (Release, host.gcc) (push) Failing after 1m55s
sm-rpc / build (Release, mipsel-linux-gnu) (push) Successful in 7m21s
82 lines
2.6 KiB
C
82 lines
2.6 KiB
C
#include <stdio.h>
|
|
#include <assert.h>
|
|
|
|
#include "zbuild.h"
|
|
#ifdef ZLIB_COMPAT
|
|
# include "zlib.h"
|
|
#else
|
|
# include "zlib-ng.h"
|
|
#endif
|
|
|
|
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t dataLen) {
|
|
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;
|
|
uint32_t combine1, combine2;
|
|
/* 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;
|
|
|
|
/* Discard inputs larger than 1Mb. */
|
|
static size_t kMaxSize = 1024 * 1024;
|
|
if (dataLen < 1 || dataLen > kMaxSize)
|
|
return 0;
|
|
|
|
/* Make sure the buffer has at least a byte. */
|
|
if (buffSize == 0)
|
|
++buffSize;
|
|
|
|
/* CRC32 */
|
|
op = PREFIX(crc32_combine_gen)(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);
|
|
Z_UNUSED(crc1);
|
|
Z_UNUSED(crc4);
|
|
}
|
|
crc1 = PREFIX(crc32_z)(crc1, data + offset, dataLen % buffSize);
|
|
|
|
crc2 = PREFIX(crc32_z)(crc2, data, dataLen);
|
|
|
|
assert(crc1 == crc2);
|
|
Z_UNUSED(crc1);
|
|
Z_UNUSED(crc2);
|
|
combine1 = PREFIX(crc32_combine)(crc1, crc2, (z_off_t)dataLen);
|
|
combine2 = PREFIX(crc32_combine)(crc1, crc1, (z_off_t)dataLen);
|
|
assert(combine1 == combine2);
|
|
|
|
/* Fast CRC32 combine. */
|
|
op = PREFIX(crc32_combine_gen)((z_off_t)dataLen);
|
|
combine1 = PREFIX(crc32_combine_op)(crc1, crc2, op);
|
|
combine2 = PREFIX(crc32_combine_op)(crc2, crc1, op);
|
|
assert(combine1 == combine2);
|
|
combine1 = PREFIX(crc32_combine)(crc1, crc2, (z_off_t)dataLen);
|
|
combine2 = PREFIX(crc32_combine_op)(crc2, crc1, op);
|
|
assert(combine1 == combine2);
|
|
|
|
/* Adler32 */
|
|
for (offset = 0; offset + buffSize <= dataLen; offset += buffSize)
|
|
adler1 = PREFIX(adler32_z)(adler1, data + offset, buffSize);
|
|
adler1 = PREFIX(adler32_z)(adler1, data + offset, dataLen % buffSize);
|
|
|
|
adler2 = PREFIX(adler32_z)(adler2, data, dataLen);
|
|
|
|
assert(adler1 == adler2);
|
|
Z_UNUSED(adler1);
|
|
Z_UNUSED(adler2);
|
|
combine1 = PREFIX(adler32_combine)(adler1, adler2, (z_off_t)dataLen);
|
|
combine2 = PREFIX(adler32_combine)(adler1, adler1, (z_off_t)dataLen);
|
|
assert(combine1 == combine2);
|
|
Z_UNUSED(combine1);
|
|
Z_UNUSED(combine2);
|
|
|
|
/* This function must return 0. */
|
|
return 0;
|
|
}
|