1 /* Generated by fuzzing - test hash_head == 0 handling. */
2
3 #include "zbuild.h"
4 #ifdef ZLIB_COMPAT
5 # include "zlib.h"
6 #else
7 # include "zlib-ng.h"
8 #endif
9
10 #include <stdio.h>
11 #include <stdlib.h>
12 #include <string.h>
13
main()14 int main() {
15 PREFIX3(stream) strm;
16 memset(&strm, 0, sizeof(strm));
17
18 int ret = PREFIX(deflateInit2)(&strm, 1, Z_DEFLATED, -15, 4, Z_HUFFMAN_ONLY);
19 if (ret != Z_OK) {
20 fprintf(stderr, "deflateInit2() failed with code %d\n", ret);
21 return EXIT_FAILURE;
22 }
23
24 unsigned char next_in[9698];
25 memset(next_in, 0x30, sizeof(next_in));
26 next_in[8193] = 0x00;
27 next_in[8194] = 0x00;
28 next_in[8195] = 0x00;
29 next_in[8199] = 0x8a;
30 strm.next_in = next_in;
31 unsigned char next_out[21572];
32 strm.next_out = next_out;
33
34 strm.avail_in = 0;
35 strm.avail_out = 1348;
36 ret = PREFIX(deflateParams(&strm, 3, Z_FILTERED));
37 if (ret != Z_OK) {
38 fprintf(stderr, "deflateParams() failed with code %d\n", ret);
39 return EXIT_FAILURE;
40 }
41
42 strm.avail_in = 6728;
43 strm.avail_out = 2696;
44 ret = PREFIX(deflate(&strm, Z_SYNC_FLUSH));
45 if (ret != Z_OK) {
46 fprintf(stderr, "deflate() failed with code %d\n", ret);
47 return EXIT_FAILURE;
48 }
49
50 strm.avail_in = 15;
51 strm.avail_out = 1348;
52 ret = PREFIX(deflateParams(&strm, 9, Z_FILTERED));
53 if (ret != Z_OK) {
54 fprintf(stderr, "deflateParams() failed with code %d\n", ret);
55 return EXIT_FAILURE;
56 }
57
58 strm.avail_in = 1453;
59 strm.avail_out = 1348;
60 ret = PREFIX(deflate(&strm, Z_FULL_FLUSH));
61 if (ret != Z_OK) {
62 fprintf(stderr, "deflate() failed with code %d\n", ret);
63 return EXIT_FAILURE;
64 }
65
66 strm.avail_in = next_in + sizeof(next_in) - strm.next_in;
67 strm.avail_out = next_out + sizeof(next_out) - strm.next_out;
68 ret = PREFIX(deflate)(&strm, Z_FINISH);
69 if (ret != Z_STREAM_END) {
70 fprintf(stderr, "deflate() failed with code %d\n", ret);
71 return EXIT_FAILURE;
72 }
73 uint32_t compressed_size = strm.next_out - next_out;
74
75 ret = PREFIX(deflateEnd)(&strm);
76 if (ret != Z_OK) {
77 fprintf(stderr, "deflateEnd() failed with code %d\n", ret);
78 return EXIT_FAILURE;
79 }
80
81 memset(&strm, 0, sizeof(strm));
82 ret = PREFIX(inflateInit2)(&strm, -15);
83 if (ret != Z_OK) {
84 fprintf(stderr, "inflateInit2() failed with code %d\n", ret);
85 return EXIT_FAILURE;
86 }
87
88 strm.next_in = next_out;
89 strm.avail_in = compressed_size;
90 unsigned char uncompressed[sizeof(next_in)];
91 strm.next_out = uncompressed;
92 strm.avail_out = sizeof(uncompressed);
93
94 ret = PREFIX(inflate)(&strm, Z_NO_FLUSH);
95 if (ret != Z_STREAM_END) {
96 fprintf(stderr, "inflate() failed with code %d\n", ret);
97 return EXIT_FAILURE;
98 }
99
100 ret = PREFIX(inflateEnd)(&strm);
101 if (ret != Z_OK) {
102 fprintf(stderr, "inflateEnd() failed with code %d\n", ret);
103 return EXIT_FAILURE;
104 }
105
106 if (memcmp(uncompressed, next_in, sizeof(uncompressed)) != 0) {
107 fprintf(stderr, "Uncompressed data differs from the original\n");
108 return EXIT_FAILURE;
109 }
110 }
111