ad1f37
From 27a84de4a30cd35f8565937397f6d1205b912818 Mon Sep 17 00:00:00 2001
ad1f37
From: Ondrej Dubaj <odubaj@redhat.com>
ad1f37
Date: Thu, 5 Sep 2019 09:16:35 +0200
ad1f37
Subject: [PATCH 1/2] fix: power8 crc32 - return 0 with 0 ptr passed
ad1f37
ad1f37
---
ad1f37
 contrib/power8-crc/vec_crc32.c | 1 +
ad1f37
 1 file changed, 1 insertion(+)
ad1f37
ad1f37
diff --git a/contrib/power8-crc/vec_crc32.c b/contrib/power8-crc/vec_crc32.c
ad1f37
index bb2204b..5ce9cd2 100644
ad1f37
--- a/contrib/power8-crc/vec_crc32.c
ad1f37
+++ b/contrib/power8-crc/vec_crc32.c
ad1f37
@@ -74,6 +74,7 @@ unsigned int CRC32_FUNCTION(unsigned int crc, const unsigned char *p,
ad1f37
 	unsigned int prealign;
ad1f37
 	unsigned int tail;
ad1f37
 
ad1f37
+	if (p == (const unsigned char *) 0x0) return 0;
ad1f37
 #ifdef CRC_XOR
ad1f37
 	crc ^= 0xffffffff;
ad1f37
 #endif
ad1f37
-- 
ad1f37
2.19.1
ad1f37
ad1f37
ad1f37
From c066ac92982a2ffe5b1e9bd36000058927437bd5 Mon Sep 17 00:00:00 2001
ad1f37
From: Ondrej Dubaj <odubaj@redhat.com>
ad1f37
Date: Thu, 5 Sep 2019 09:36:47 +0200
ad1f37
Subject: [PATCH 2/2] Add CRC32 tests (crc32_test)
ad1f37
ad1f37
This commit includes a CRC32 test (crc32_test). This tests are important
ad1f37
since some architectures may want include CPU dependent optimizations for
ad1f37
CRC32 algorithm like using vector instructions and we may want to
ad1f37
validate those.
ad1f37
---
ad1f37
 Makefile.in       |  35 +++++---
ad1f37
 test/crc32_test.c | 205 ++++++++++++++++++++++++++++++++++++++++++++++
ad1f37
 2 files changed, 230 insertions(+), 10 deletions(-)
ad1f37
 create mode 100644 test/crc32_test.c
ad1f37
ad1f37
diff --git a/Makefile.in b/Makefile.in
ad1f37
index 40b5cfb..6070dcc 100644
ad1f37
--- a/Makefile.in
ad1f37
+++ b/Makefile.in
ad1f37
@@ -75,11 +75,11 @@ PIC_OBJS = $(PIC_OBJC) $(PIC_OBJA)
ad1f37
 
ad1f37
 all: static shared
ad1f37
 
ad1f37
-static: example$(EXE) minigzip$(EXE)
ad1f37
+static: crc32_test$(EXE) example$(EXE) minigzip$(EXE)
ad1f37
 
ad1f37
-shared: examplesh$(EXE) minigzipsh$(EXE)
ad1f37
+shared: crc32_testsh$(EXE) examplesh$(EXE) minigzipsh$(EXE)
ad1f37
 
ad1f37
-all64: example64$(EXE) minigzip64$(EXE)
ad1f37
+all64: crc32_test64$(EXE) example64$(EXE) minigzip64$(EXE)
ad1f37
 
ad1f37
 check: test
ad1f37
 
ad1f37
@@ -87,7 +87,7 @@ test: all teststatic testshared
ad1f37
 
ad1f37
 teststatic: static
ad1f37
 	@TMPST=tmpst_$$; \
ad1f37
-	if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST ; then \
ad1f37
+	if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST && ./crc32_test; then \
ad1f37
 	  echo '		*** zlib test OK ***'; \
ad1f37
 	else \
ad1f37
 	  echo '		*** zlib test FAILED ***'; false; \
ad1f37
@@ -100,7 +100,7 @@ testshared: shared
ad1f37
 	DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \
ad1f37
 	SHLIB_PATH=`pwd`:$(SHLIB_PATH) ; export SHLIB_PATH; \
ad1f37
 	TMPSH=tmpsh_$$; \
ad1f37
-	if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH; then \
ad1f37
+	if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH && ./crc32_testsh; then \
ad1f37
 	  echo '		*** zlib shared test OK ***'; \
ad1f37
 	else \
ad1f37
 	  echo '		*** zlib shared test FAILED ***'; false; \
ad1f37
@@ -109,7 +109,7 @@ testshared: shared
ad1f37
 
ad1f37
 test64: all64
ad1f37
 	@TMP64=tmp64_$$; \
ad1f37
-	if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \
ad1f37
+	if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64 && ./crc32_test64; then \
ad1f37
 	  echo '		*** zlib 64-bit test OK ***'; \
ad1f37
 	else \
ad1f37
 	  echo '		*** zlib 64-bit test FAILED ***'; false; \
ad1f37
@@ -157,6 +157,12 @@ example.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h
ad1f37
 minigzip.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h
ad1f37
 	$(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/minigzip.c
ad1f37
 
ad1f37
+crc32_test.o: $(SRCDIR)test/crc32_test.c $(SRCDIR)zlib.h zconf.h
ad1f37
+	$(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/crc32_test.c
ad1f37
+
ad1f37
+crc32_test64.o: $(SRCDIR)test/crc32_test.c $(SRCDIR)zlib.h zconf.h
ad1f37
+	$(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/crc32_test.c
ad1f37
+
ad1f37
 example64.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h
ad1f37
 	$(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/example.c
ad1f37
 
ad1f37
@@ -307,12 +313,21 @@ example$(EXE): example.o $(STATICLIB)
ad1f37
 minigzip$(EXE): minigzip.o $(STATICLIB)
ad1f37
 	$(CC) $(CFLAGS) -o $@ minigzip.o $(TEST_LDFLAGS)
ad1f37
 
ad1f37
+crc32_test$(EXE): crc32_test.o $(STATICLIB)
ad1f37
+	$(CC) $(CFLAGS) -o $@ crc32_test.o $(TEST_LDFLAGS)
ad1f37
+
ad1f37
+crc32_testsh$(EXE): crc32_test.o $(SHAREDLIBV)
ad1f37
+	$(CC) $(CFLAGS) -o $@ crc32_test.o -L. $(SHAREDLIBV)
ad1f37
+
ad1f37
 examplesh$(EXE): example.o $(SHAREDLIBV)
ad1f37
 	$(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIBV)
ad1f37
 
ad1f37
 minigzipsh$(EXE): minigzip.o $(SHAREDLIBV)
ad1f37
 	$(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIBV)
ad1f37
 
ad1f37
+crc32_test64$(EXE): crc32_test64.o $(STATICLIB)
ad1f37
+	$(CC) $(CFLAGS) -o $@ crc32_test64.o $(TEST_LDFLAGS)
ad1f37
+
ad1f37
 example64$(EXE): example64.o $(STATICLIB)
ad1f37
 	$(CC) $(CFLAGS) -o $@ example64.o $(TEST_LDFLAGS)
ad1f37
 
ad1f37
@@ -382,8 +397,8 @@ zconf: $(SRCDIR)zconf.h.in
ad1f37
 mostlyclean: clean
ad1f37
 clean:
ad1f37
 	rm -f *.o *.lo *~ \
ad1f37
-	   example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \
ad1f37
-	   example64$(EXE) minigzip64$(EXE) \
ad1f37
+	   crc32_test$(EXE) example$(EXE) minigzip$(EXE) crc32_testsh$(EXE) examplesh$(EXE) minigzipsh$(EXE) \
ad1f37
+	   crc32_test64$(EXE) example64$(EXE) minigzip64$(EXE) \
ad1f37
 	   infcover \
ad1f37
 	   libz.* foo.gz so_locations \
ad1f37
 	   _match.s maketree contrib/infback9/*.o
ad1f37
@@ -407,7 +422,7 @@ tags:
ad1f37
 
ad1f37
 adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
ad1f37
 gzclose.o gzlib.o gzread.o gzwrite.o: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h
ad1f37
-compress.o example.o minigzip.o uncompr.o: $(SRCDIR)zlib.h zconf.h
ad1f37
+compress.o crc32_test.o example.o minigzip.o uncompr.o: $(SRCDIR)zlib.h zconf.h
ad1f37
 crc32.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h
ad1f37
 deflate.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
ad1f37
 infback.o inflate.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h
ad1f37
@@ -417,7 +432,7 @@ trees.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)tr
ad1f37
 
ad1f37
 adler32.lo zutil.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
ad1f37
 gzclose.lo gzlib.lo gzread.lo gzwrite.lo: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h
ad1f37
-compress.lo example.lo minigzip.lo uncompr.lo: $(SRCDIR)zlib.h zconf.h
ad1f37
+compress.lo crc32_test.lo example.lo minigzip.lo uncompr.lo: $(SRCDIR)zlib.h zconf.h
ad1f37
 crc32.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h
ad1f37
 deflate.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
ad1f37
 infback.lo inflate.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h
ad1f37
diff --git a/test/crc32_test.c b/test/crc32_test.c
ad1f37
new file mode 100644
ad1f37
index 0000000..5d73128
ad1f37
--- /dev/null
ad1f37
+++ b/test/crc32_test.c
ad1f37
@@ -0,0 +1,205 @@
ad1f37
+/* crc32_tes.c -- unit test for crc32 in the zlib compression library
ad1f37
+ * Copyright (C) 1995-2006, 2010, 2011, 2016, 2019 Rogerio Alves
ad1f37
+ * For conditions of distribution and use, see copyright notice in zlib.h
ad1f37
+ */
ad1f37
+
ad1f37
+#include "zlib.h"
ad1f37
+#include <stdio.h>
ad1f37
+
ad1f37
+#ifdef STDC
ad1f37
+#  include <string.h>
ad1f37
+#  include <stdlib.h>
ad1f37
+#endif
ad1f37
+
ad1f37
+void test_crc32  OF((uLong crc, Byte* buf, z_size_t len, uLong chk, int line));
ad1f37
+int main         OF((void));
ad1f37
+
ad1f37
+typedef struct {
ad1f37
+    int line;
ad1f37
+	uLong crc;
ad1f37
+    Byte* buf;
ad1f37
+	int len;
ad1f37
+    uLong expect;
ad1f37
+} crc32_test;
ad1f37
+
ad1f37
+void test_crc32(crc, buf, len, chk, line)
ad1f37
+    uLong crc;
ad1f37
+    Byte *buf;
ad1f37
+    z_size_t len;
ad1f37
+    uLong chk;
ad1f37
+    int line;
ad1f37
+{
ad1f37
+    uLong res = crc32(crc, buf, len);
ad1f37
+	if (res != chk) {
ad1f37
+        fprintf(stderr, "FAIL [%d]: crc32 returned 0x%08X expected 0x%08X\n",
ad1f37
+                line, (unsigned int)res, (unsigned int)chk);
ad1f37
+        exit(1);
ad1f37
+    }
ad1f37
+}
ad1f37
+
ad1f37
+static const crc32_test tests[] = {
ad1f37
+  {__LINE__, 0x0, 0x0, 0, 0x0},
ad1f37
+  {__LINE__, 0xffffffff, 0x0, 0, 0x0},
ad1f37
+  {__LINE__, 0x0, 0x0, 255, 0x0}, /*  BZ 174799.  */
ad1f37
+  {__LINE__, 0x0, 0x0, 256, 0x0},
ad1f37
+  {__LINE__, 0x0, 0x0, 257, 0x0},
ad1f37
+  {__LINE__, 0x0, 0x0, 32767, 0x0},
ad1f37
+  {__LINE__, 0x0, 0x0, 32768, 0x0},
ad1f37
+  {__LINE__, 0x0, 0x0, 32769, 0x0},
ad1f37
+  {__LINE__, 0x0, "", 0, 0x0},
ad1f37
+  {__LINE__, 0xffffffff, "", 0, 0xffffffff},
ad1f37
+  {__LINE__, 0x0, "abacus", 6, 0xc3d7115b},
ad1f37
+  {__LINE__, 0x0, "backlog", 7, 0x269205},
ad1f37
+  {__LINE__, 0x0, "campfire", 8, 0x22a515f8},
ad1f37
+  {__LINE__, 0x0, "delta", 5, 0x9643fed9},
ad1f37
+  {__LINE__, 0x0, "executable", 10, 0xd68eda01},
ad1f37
+  {__LINE__, 0x0, "file", 4, 0x8c9f3610},
ad1f37
+  {__LINE__, 0x0, "greatest", 8, 0xc1abd6cd},
ad1f37
+  {__LINE__, 0x0, "hello", 5, 0x3610a686},
ad1f37
+  {__LINE__, 0x0, "inverter", 8, 0xc9e962c9},
ad1f37
+  {__LINE__, 0x0, "jigsaw", 6, 0xce4e3f69},
ad1f37
+  {__LINE__, 0x0, "karate", 6, 0x890be0e2},
ad1f37
+  {__LINE__, 0x0, "landscape", 9, 0xc4e0330b},
ad1f37
+  {__LINE__, 0x0, "machine", 7, 0x1505df84},
ad1f37
+  {__LINE__, 0x0, "nanometer", 9, 0xd4e19f39},
ad1f37
+  {__LINE__, 0x0, "oblivion", 8, 0xdae9de77},
ad1f37
+  {__LINE__, 0x0, "panama", 6, 0x66b8979c},
ad1f37
+  {__LINE__, 0x0, "quest", 5, 0x4317f817},
ad1f37
+  {__LINE__, 0x0, "resource", 8, 0xbc91f416},
ad1f37
+  {__LINE__, 0x0, "secret", 6, 0x5ca2e8e5},
ad1f37
+  {__LINE__, 0x0, "test", 4, 0xd87f7e0c},
ad1f37
+  {__LINE__, 0x0, "ultimate", 8, 0x3fc79b0b},
ad1f37
+  {__LINE__, 0x0, "vector", 6, 0x1b6e485b},
ad1f37
+  {__LINE__, 0x0, "walrus", 6, 0xbe769b97},
ad1f37
+  {__LINE__, 0x0, "xeno", 4, 0xe7a06444},
ad1f37
+  {__LINE__, 0x0, "yelling", 7, 0xfe3944e5},
ad1f37
+  {__LINE__, 0x0, "zlib", 4, 0x73887d3a},
ad1f37
+  {__LINE__, 0x0, "4BJD7PocN1VqX0jXVpWB", 20, 0xd487a5a1},
ad1f37
+  {__LINE__, 0x0, "F1rPWI7XvDs6nAIRx41l", 20, 0x61a0132e},
ad1f37
+  {__LINE__, 0x0, "ldhKlsVkPFOveXgkGtC2", 20, 0xdf02f76},
ad1f37
+  {__LINE__, 0x0, "5KKnGOOrs8BvJ35iKTOS", 20, 0x579b2b0a},
ad1f37
+  {__LINE__, 0x0, "0l1tw7GOcem06Ddu7yn4", 20, 0xf7d16e2d},
ad1f37
+  {__LINE__, 0x0, "MCr47CjPIn9R1IvE1Tm5", 20, 0x731788f5},
ad1f37
+  {__LINE__, 0x0, "UcixbzPKTIv0SvILHVdO", 20, 0x7112bb11},
ad1f37
+  {__LINE__, 0x0, "dGnAyAhRQDsWw0ESou24", 20, 0xf32a0dac},
ad1f37
+  {__LINE__, 0x0, "di0nvmY9UYMYDh0r45XT", 20, 0x625437bb},
ad1f37
+  {__LINE__, 0x0, "2XKDwHfAhFsV0RhbqtvH", 20, 0x896930f9},
ad1f37
+  {__LINE__, 0x0, "ZhrANFIiIvRnqClIVyeD", 20, 0x8579a37},
ad1f37
+  {__LINE__, 0x0, "v7Q9ehzioTOVeDIZioT1", 20, 0x632aa8e0},
ad1f37
+  {__LINE__, 0x0, "Yod5hEeKcYqyhfXbhxj2", 20, 0xc829af29},
ad1f37
+  {__LINE__, 0x0, "GehSWY2ay4uUKhehXYb0", 20, 0x1b08b7e8},
ad1f37
+  {__LINE__, 0x0, "kwytJmq6UqpflV8Y8GoE", 20, 0x4e33b192},
ad1f37
+  {__LINE__, 0x0, "70684206568419061514", 20, 0x59a179f0},
ad1f37
+  {__LINE__, 0x0, "42015093765128581010", 20, 0xcd1013d7},
ad1f37
+  {__LINE__, 0x0, "88214814356148806939", 20, 0xab927546},
ad1f37
+  {__LINE__, 0x0, "43472694284527343838", 20, 0x11f3b20c},
ad1f37
+  {__LINE__, 0x0, "49769333513942933689", 20, 0xd562d4ca},
ad1f37
+  {__LINE__, 0x0, "54979784887993251199", 20, 0x233395f7},
ad1f37
+  {__LINE__, 0x0, "58360544869206793220", 20, 0x2d167fd5},
ad1f37
+  {__LINE__, 0x0, "27347953487840714234", 20, 0x8b5108ba},
ad1f37
+  {__LINE__, 0x0, "07650690295365319082", 20, 0xc46b3cd8},
ad1f37
+  {__LINE__, 0x0, "42655507906821911703", 20, 0xc10b2662},
ad1f37
+  {__LINE__, 0x0, "29977409200786225655", 20, 0xc9a0f9d2},
ad1f37
+  {__LINE__, 0x0, "85181542907229116674", 20, 0x9341357b},
ad1f37
+  {__LINE__, 0x0, "87963594337989416799", 20, 0xf0424937},
ad1f37
+  {__LINE__, 0x0, "21395988329504168551", 20, 0xd7c4c31f},
ad1f37
+  {__LINE__, 0x0, "51991013580943379423", 20, 0xf11edcc4},
ad1f37
+  {__LINE__, 0x0, "*]+@!);({_$;}[_},?{?;(_?,=-][@", 30, 0x40795df4},
ad1f37
+  {__LINE__, 0x0, "_@:_).&(#.[:[{[:)$++-($_;@[)}+", 30, 0xdd61a631},
ad1f37
+  {__LINE__, 0x0, "&[!,[$_==}+.]@!;*(+},[;:)$;)-@", 30, 0xca907a99},
ad1f37
+  {__LINE__, 0x0, "]{.[.+?+[[=;[?}_#&;[=)__$$:+=_", 30, 0xf652deac},
ad1f37
+  {__LINE__, 0x0, "-%.)=/[@].:.(:,()$;=%@-$?]{%+%", 30, 0xaf39a5a9},
ad1f37
+  {__LINE__, 0x0, "+]#$(@&.=:,*];/.!]%/{:){:@(;)$", 30, 0x6bebb4cf},
ad1f37
+  {__LINE__, 0x0, ")-._.:?[&:.=+}(*$/=!.${;(=$@!}", 30, 0x76430bac},
ad1f37
+  {__LINE__, 0x0, ":(_*&%/[[}+,?#$&*+#[([*-/#;%(]", 30, 0x6c80c388},
ad1f37
+  {__LINE__, 0x0, "{[#-;:$/{)(+[}#]/{&!%(@)%:@-$:", 30, 0xd54d977d},
ad1f37
+  {__LINE__, 0x0, "_{$*,}(&,@.)):=!/%(&(,,-?$}}}!", 30, 0xe3966ad5},
ad1f37
+  {__LINE__, 0x0, "e$98KNzqaV)Y:2X?]77].{gKRD4G5{mHZk,Z)SpU%L3FSgv!Wb8MLAFdi{+fp)c,@8m6v)yXg@]HBDFk?.4&}g5_udE*JHCiH=aL", 100, 0xe7c71db9},
ad1f37
+  {__LINE__, 0x0, "r*Fd}ef+5RJQ;+W=4jTR9)R*p!B;]Ed7tkrLi;88U7g@3v!5pk2X6D)vt,.@N8c]@yyEcKi[vwUu@.Ppm@C6%Mv*3Nw}Y,58_aH)", 100, 0xeaa52777},
ad1f37
+  {__LINE__, 0x0, "h{bcmdC+a;t+Cf{6Y_dFq-{X4Yu&7uNfVDh?q&_u.UWJU],-GiH7ADzb7-V.Q%4=+v!$L9W+T=bP]$_:]Vyg}A.ygD.r;h-D]m%&", 100, 0xcd472048},
ad1f37
+  {__LINE__, 0x7a30360d, "abacus", 6, 0xf8655a84},
ad1f37
+  {__LINE__, 0x6fd767ee, "backlog", 7, 0x1ed834b1},
ad1f37
+  {__LINE__, 0xefeb7589, "campfire", 8, 0x686cfca},
ad1f37
+  {__LINE__, 0x61cf7e6b, "delta", 5, 0x1554e4b1},
ad1f37
+  {__LINE__, 0xdc712e2, "executable", 10, 0x761b4254},
ad1f37
+  {__LINE__, 0xad23c7fd, "file", 4, 0x7abdd09b},
ad1f37
+  {__LINE__, 0x85cb2317, "greatest", 8, 0x4ba91c6b},
ad1f37
+  {__LINE__, 0x9eed31b0, "inverter", 8, 0xd5e78ba5},
ad1f37
+  {__LINE__, 0xb94f34ca, "jigsaw", 6, 0x23649109},
ad1f37
+  {__LINE__, 0xab058a2, "karate", 6, 0xc5591f41},
ad1f37
+  {__LINE__, 0x5bff2b7a, "landscape", 9, 0xf10eb644},
ad1f37
+  {__LINE__, 0x605c9a5f, "machine", 7, 0xbaa0a636},
ad1f37
+  {__LINE__, 0x51bdeea5, "nanometer", 9, 0x6af89afb},
ad1f37
+  {__LINE__, 0x85c21c79, "oblivion", 8, 0xecae222b},
ad1f37
+  {__LINE__, 0x97216f56, "panama", 6, 0x47dffac4},
ad1f37
+  {__LINE__, 0x18444af2, "quest", 5, 0x70c2fe36},
ad1f37
+  {__LINE__, 0xbe6ce359, "resource", 8, 0x1471d925},
ad1f37
+  {__LINE__, 0x843071f1, "secret", 6, 0x50c9a0db},
ad1f37
+  {__LINE__, 0xf2480c60, "ultimate", 8, 0xf973daf8},
ad1f37
+  {__LINE__, 0x2d2feb3d, "vector", 6, 0x344ac03d},
ad1f37
+  {__LINE__, 0x7490310a, "walrus", 6, 0x6d1408ef},
ad1f37
+  {__LINE__, 0x97d247d4, "xeno", 4, 0xe62670b5},
ad1f37
+  {__LINE__, 0x93cf7599, "yelling", 7, 0x1b36da38},
ad1f37
+  {__LINE__, 0x73c84278, "zlib", 4, 0x6432d127},
ad1f37
+  {__LINE__, 0x228a87d1, "4BJD7PocN1VqX0jXVpWB", 20, 0x997107d0},
ad1f37
+  {__LINE__, 0xa7a048d0, "F1rPWI7XvDs6nAIRx41l", 20, 0xdc567274},
ad1f37
+  {__LINE__, 0x1f0ded40, "ldhKlsVkPFOveXgkGtC2", 20, 0xdcc63870},
ad1f37
+  {__LINE__, 0xa804a62f, "5KKnGOOrs8BvJ35iKTOS", 20, 0x6926cffd},
ad1f37
+  {__LINE__, 0x508fae6a, "0l1tw7GOcem06Ddu7yn4", 20, 0xb52b38bc},
ad1f37
+  {__LINE__, 0xe5adaf4f, "MCr47CjPIn9R1IvE1Tm5", 20, 0xf83b8178},
ad1f37
+  {__LINE__, 0x67136a40, "UcixbzPKTIv0SvILHVdO", 20, 0xc5213070},
ad1f37
+  {__LINE__, 0xb00c4a10, "dGnAyAhRQDsWw0ESou24", 20, 0xbc7648b0},
ad1f37
+  {__LINE__, 0x2e0c84b5, "di0nvmY9UYMYDh0r45XT", 20, 0xd8123a72},
ad1f37
+  {__LINE__, 0x81238d44, "2XKDwHfAhFsV0RhbqtvH", 20, 0xd5ac5620},
ad1f37
+  {__LINE__, 0xf853aa92, "ZhrANFIiIvRnqClIVyeD", 20, 0xceae099d},
ad1f37
+  {__LINE__, 0x5a692325, "v7Q9ehzioTOVeDIZioT1", 20, 0xb07d2b24},
ad1f37
+  {__LINE__, 0x3275b9f, "Yod5hEeKcYqyhfXbhxj2", 20, 0x24ce91df},
ad1f37
+  {__LINE__, 0x38371feb, "GehSWY2ay4uUKhehXYb0", 20, 0x707b3b30},
ad1f37
+  {__LINE__, 0xafc8bf62, "kwytJmq6UqpflV8Y8GoE", 20, 0x16abc6a9},
ad1f37
+  {__LINE__, 0x9b07db73, "70684206568419061514", 20, 0xae1fb7b7},
ad1f37
+  {__LINE__, 0xe75b214, "42015093765128581010", 20, 0xd4eecd2d},
ad1f37
+  {__LINE__, 0x72d0fe6f, "88214814356148806939", 20, 0x4660ec7},
ad1f37
+  {__LINE__, 0xf857a4b1, "43472694284527343838", 20, 0xfd8afdf7},
ad1f37
+  {__LINE__, 0x54b8e14, "49769333513942933689", 20, 0xc6d1b5f2},
ad1f37
+  {__LINE__, 0xd6aa5616, "54979784887993251199", 20, 0x32476461},
ad1f37
+  {__LINE__, 0x11e63098, "58360544869206793220", 20, 0xd917cf1a},
ad1f37
+  {__LINE__, 0xbe92385, "27347953487840714234", 20, 0x4ad14a12},
ad1f37
+  {__LINE__, 0x49511de0, "07650690295365319082", 20, 0xe37b5c6c},
ad1f37
+  {__LINE__, 0x3db13bc1, "42655507906821911703", 20, 0x7cc497f1},
ad1f37
+  {__LINE__, 0xbb899bea, "29977409200786225655", 20, 0x99781bb2},
ad1f37
+  {__LINE__, 0xf6cd9436, "85181542907229116674", 20, 0x132256a1},
ad1f37
+  {__LINE__, 0x9109e6c3, "87963594337989416799", 20, 0xbfdb2c83},
ad1f37
+  {__LINE__, 0x75770fc, "21395988329504168551", 20, 0x8d9d1e81},
ad1f37
+  {__LINE__, 0x69b1d19b, "51991013580943379423", 20, 0x7b6d4404},
ad1f37
+  {__LINE__, 0xc6132975, "*]+@!);({_$;}[_},?{?;(_?,=-][@", 30, 0x8619f010},
ad1f37
+  {__LINE__, 0xd58cb00c, "_@:_).&(#.[:[{[:)$++-($_;@[)}+", 30, 0x15746ac3},
ad1f37
+  {__LINE__, 0xb63b8caa, "&[!,[$_==}+.]@!;*(+},[;:)$;)-@", 30, 0xaccf812f},
ad1f37
+  {__LINE__, 0x8a45a2b8, "]{.[.+?+[[=;[?}_#&;[=)__$$:+=_", 30, 0x78af45de},
ad1f37
+  {__LINE__, 0xcbe95b78, "-%.)=/[@].:.(:,()$;=%@-$?]{%+%", 30, 0x25b06b59},
ad1f37
+  {__LINE__, 0x4ef8a54b, "+]#$(@&.=:,*];/.!]%/{:){:@(;)$", 30, 0x4ba0d08f},
ad1f37
+  {__LINE__, 0x76ad267a, ")-._.:?[&:.=+}(*$/=!.${;(=$@!}", 30, 0xe26b6aac},
ad1f37
+  {__LINE__, 0x569e613c, ":(_*&%/[[}+,?#$&*+#[([*-/#;%(]", 30, 0x7e2b0a66},
ad1f37
+  {__LINE__, 0x36aa61da, "{[#-;:$/{)(+[}#]/{&!%(@)%:@-$:", 30, 0xb3430dc7},
ad1f37
+  {__LINE__, 0xf67222df, "_{$*,}(&,@.)):=!/%(&(,,-?$}}}!", 30, 0x626c17a},
ad1f37
+  {__LINE__, 0x74b34fd3, "e$98KNzqaV)Y:2X?]77].{gKRD4G5{mHZk,Z)SpU%L3FSgv!Wb8MLAFdi{+fp)c,@8m6v)yXg@]HBDFk?.4&}g5_udE*JHCiH=aL", 100, 0xccf98060},
ad1f37
+  {__LINE__, 0x351fd770, "r*Fd}ef+5RJQ;+W=4jTR9)R*p!B;]Ed7tkrLi;88U7g@3v!5pk2X6D)vt,.@N8c]@yyEcKi[vwUu@.Ppm@C6%Mv*3Nw}Y,58_aH)", 100, 0xd8b95312},
ad1f37
+  {__LINE__, 0xc45aef77, "h{bcmdC+a;t+Cf{6Y_dFq-{X4Yu&7uNfVDh?q&_u.UWJU],-GiH7ADzb7-V.Q%4=+v!$L9W+T=bP]$_:]Vyg}A.ygD.r;h-D]m%&", 100, 0xbb1c9912},
ad1f37
+  {__LINE__, 0xc45aef77, "h{bcmdC+a;t+Cf{6Y_dFq-{X4Yu&7uNfVDh?q&_u.UWJU],-GiH7ADzb7-V.Q%4=+v!$L9W+T=bP]$_:]Vyg}A.ygD.r;h-D]m%&"
ad1f37
+                         "h{bcmdC+a;t+Cf{6Y_dFq-{X4Yu&7uNfVDh?q&_u.UWJU],-GiH7ADzb7-V.Q%4=+v!$L9W+T=bP]$_:]Vyg}A.ygD.r;h-D]m%&"
ad1f37
+                         "h{bcmdC+a;t+Cf{6Y_dFq-{X4Yu&7uNfVDh?q&_u.UWJU],-GiH7ADzb7-V.Q%4=+v!$L9W+T=bP]$_:]Vyg}A.ygD.r;h-D]m%&"
ad1f37
+                         "h{bcmdC+a;t+Cf{6Y_dFq-{X4Yu&7uNfVDh?q&_u.UWJU],-GiH7ADzb7-V.Q%4=+v!$L9W+T=bP]$_:]Vyg}A.ygD.r;h-D]m%&"
ad1f37
+                         "h{bcmdC+a;t+Cf{6Y_dFq-{X4Yu&7uNfVDh?q&_u.UWJU],-GiH7ADzb7-V.Q%4=+v!$L9W+T=bP]$_:]Vyg}A.ygD.r;h-D]m%&"
ad1f37
+                         "h{bcmdC+a;t+Cf{6Y_dFq-{X4Yu&7uNfVDh?q&_u.UWJU],-GiH7ADzb7-V.Q%4=+v!$L9W+T=bP]$_:]Vyg}A.ygD.r;h-D]m%&", 600, 0x888AFA5B}
ad1f37
+};
ad1f37
+
ad1f37
+static const int test_size = sizeof(tests) / sizeof(tests[0]);
ad1f37
+
ad1f37
+int main(void)
ad1f37
+{
ad1f37
+    int i;
ad1f37
+    for (i = 0; i < test_size; i++) {
ad1f37
+        test_crc32(tests[i].crc, tests[i].buf, tests[i].len,
ad1f37
+                   tests[i].expect, tests[i].line);
ad1f37
+    }
ad1f37
+    return 0;
ad1f37
+}
ad1f37
\ No newline at end of file
ad1f37
-- 
ad1f37
2.19.1
ad1f37