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