diff --git a/.travis.yml b/.travis.yml index 62e81892..463cb6ef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,6 +15,7 @@ env: - ZSTD_TRAVIS_CI_ENV=clangtest - ZSTD_TRAVIS_CI_ENV=gpptest - ZSTD_TRAVIS_CI_ENV=armtest + - ZSTD_TRAVIS_CI_ENV=sanitize matrix: fast_finish: true diff --git a/Makefile b/Makefile index 47d727cc..8049649d 100644 --- a/Makefile +++ b/Makefile @@ -100,9 +100,9 @@ gpptest: clean armtest: clean cd $(ZSTDDIR); $(MAKE) -e all CC=arm-linux-gnueabi-gcc MOREFLAGS="-Werror" - cd $(PRGDIR); $(MAKE) -e CC=arm-linux-gnueabi-gcc CPPFLAGS="-Werror" + cd $(PRGDIR); $(MAKE) -e CC=arm-linux-gnueabi-gcc MOREFLAGS="-Werror" sanitize: clean - $(MAKE) test CC=clang CPPFLAGS="-g -fsanitize=undefined" FUZZER_TIME="-T1mn" NB_LOOPS=-i1 + $(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=undefined" endif diff --git a/lib/zstd.c b/lib/zstd.c index 880bd8ea..32cb8929 100644 --- a/lib/zstd.c +++ b/lib/zstd.c @@ -178,11 +178,13 @@ static unsigned ZSTD_isLittleEndian(void) return one.c[0]; } -static U16 ZSTD_read16(const void* p) { return *(const U16*)p; } +static U16 ZSTD_read16(const void* p) { U16 r; memcpy(&r, p, sizeof(r)); return r; } -static U32 ZSTD_read32(const void* p) { return *(const U32*)p; } +static U32 ZSTD_read32(const void* p) { U32 r; memcpy(&r, p, sizeof(r)); return r; } -static size_t ZSTD_read_ARCH(const void* p) { return *(const size_t*)p; } +static U32 ZSTD_read64(const void* p) { U64 r; memcpy(&r, p, sizeof(r)); return r; } + +static size_t ZSTD_read_ARCH(const void* p) { size_t r; memcpy(&r, p, sizeof(r)); return r; } static void ZSTD_copy4(void* dst, const void* src) { memcpy(dst, src, 4); } @@ -911,7 +913,7 @@ static const U64 prime7bytes = 58295818150454627ULL; //static U32 ZSTD_hashPtr(const void* p) { return ( ((*(U64*)p & 0xFFFFFFFFFFFFFF) * prime7bytes) >> (64-HASH_LOG)); } //static U32 ZSTD_hashPtr(const void* p) { return ( (*(U64*)p * prime8bytes) >> (64-HASH_LOG)); } -static U32 ZSTD_hashPtr(const void* p) { return ( (*(const U64*)p * prime7bytes) >> (56-HASH_LOG)) & HASH_MASK; } +static U32 ZSTD_hashPtr(const void* p) { return ( (ZSTD_read64(p) * prime7bytes) >> (56-HASH_LOG)) & HASH_MASK; } //static U32 ZSTD_hashPtr(const void* p) { return ( (*(U64*)p * prime6bytes) >> (48-HASH_LOG)) & HASH_MASK; } //static U32 ZSTD_hashPtr(const void* p) { return ( (*(U64*)p * prime5bytes) >> (40-HASH_LOG)) & HASH_MASK; } //static U32 ZSTD_hashPtr(const void* p) { return ( (*(U32*)p * KNUTH) >> (32-HASH_LOG)); } diff --git a/programs/Makefile b/programs/Makefile index a6304db5..64044622 100644 --- a/programs/Makefile +++ b/programs/Makefile @@ -116,11 +116,11 @@ uninstall: [ -f $(DESTDIR)$(MANDIR)/unzstd.1 ] && rm -f $(DESTDIR)$(MANDIR)/unzstd.1 @echo zstd programs successfully uninstalled -test: test-zstd test-fullbench test-fuzzer test-mem +test: test-zstd test-fullbench test-fuzzer test32: test-zstd32 test-fullbench32 test-fuzzer32 -test-all: test test32 +test-all: test test32 test-mem test-zstd: zstd datagen ./datagen | ./zstd -v | ./zstd -d > $(VOID) @@ -151,7 +151,7 @@ test-mem: zstd datagen fuzzer fullbench valgrind --leak-check=yes --error-exitcode=1 ./datagen -g50M > /dev/null ./datagen -g16KB > tmp valgrind --leak-check=yes --error-exitcode=1 ./zstd -vf tmp /dev/null - ./datagen -g128MB > tmp + ./datagen -g64MB > tmp valgrind --leak-check=yes --error-exitcode=1 ./zstd -vf tmp /dev/null @rm tmp valgrind --leak-check=yes --error-exitcode=1 ./fuzzer -i128 -t1