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