Added sanitize=undefine test
diff --git a/.travis.yml b/.travis.yml
index 62e8189..463cb6e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -15,6 +15,7 @@
   - 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 47d727c..8049649 100644
--- a/Makefile
+++ b/Makefile
@@ -100,9 +100,9 @@
 
 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 880bd8e..32cb892 100644
--- a/lib/zstd.c
+++ b/lib/zstd.c
@@ -178,11 +178,13 @@
     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 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 a6304db..6404462 100644
--- a/programs/Makefile
+++ b/programs/Makefile
@@ -116,11 +116,11 @@
 	[ -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 @@
 	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