xref: /aosp_15_r20/external/zlib/contrib/tests/fuzzers/inflate_fuzzer.cc (revision 86ee64e75fa5f8bce2c8c356138035642429cd05)
1*86ee64e7SAndroid Build Coastguard Worker // Copyright 2017 The Chromium Authors
2*86ee64e7SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*86ee64e7SAndroid Build Coastguard Worker // found in the LICENSE file.
4*86ee64e7SAndroid Build Coastguard Worker 
5*86ee64e7SAndroid Build Coastguard Worker #include <stddef.h>
6*86ee64e7SAndroid Build Coastguard Worker #include <stdint.h>
7*86ee64e7SAndroid Build Coastguard Worker #include <string.h>
8*86ee64e7SAndroid Build Coastguard Worker #include <cassert>
9*86ee64e7SAndroid Build Coastguard Worker #include <vector>
10*86ee64e7SAndroid Build Coastguard Worker 
11*86ee64e7SAndroid Build Coastguard Worker #include "zlib.h"
12*86ee64e7SAndroid Build Coastguard Worker 
13*86ee64e7SAndroid Build Coastguard Worker static Bytef buffer[256 * 1024] = {0};
14*86ee64e7SAndroid Build Coastguard Worker 
15*86ee64e7SAndroid Build Coastguard Worker // Entry point for LibFuzzer.
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)16*86ee64e7SAndroid Build Coastguard Worker extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
17*86ee64e7SAndroid Build Coastguard Worker   // We need to strip the 'const' for zlib
18*86ee64e7SAndroid Build Coastguard Worker   std::vector<unsigned char> input_buffer{data, data+size};
19*86ee64e7SAndroid Build Coastguard Worker 
20*86ee64e7SAndroid Build Coastguard Worker   uLongf buffer_length = static_cast<uLongf>(sizeof(buffer));
21*86ee64e7SAndroid Build Coastguard Worker 
22*86ee64e7SAndroid Build Coastguard Worker   z_stream stream;
23*86ee64e7SAndroid Build Coastguard Worker   stream.next_in = input_buffer.data();
24*86ee64e7SAndroid Build Coastguard Worker   stream.avail_in = size;
25*86ee64e7SAndroid Build Coastguard Worker   stream.total_in = size;
26*86ee64e7SAndroid Build Coastguard Worker   stream.next_out = buffer;
27*86ee64e7SAndroid Build Coastguard Worker   stream.avail_out = buffer_length;
28*86ee64e7SAndroid Build Coastguard Worker   stream.total_out = buffer_length;
29*86ee64e7SAndroid Build Coastguard Worker   stream.zalloc = Z_NULL;
30*86ee64e7SAndroid Build Coastguard Worker   stream.zfree = Z_NULL;
31*86ee64e7SAndroid Build Coastguard Worker 
32*86ee64e7SAndroid Build Coastguard Worker   if (Z_OK != inflateInit(&stream)) {
33*86ee64e7SAndroid Build Coastguard Worker     inflateEnd(&stream);
34*86ee64e7SAndroid Build Coastguard Worker     assert(false);
35*86ee64e7SAndroid Build Coastguard Worker   }
36*86ee64e7SAndroid Build Coastguard Worker 
37*86ee64e7SAndroid Build Coastguard Worker   inflate(&stream, Z_NO_FLUSH);
38*86ee64e7SAndroid Build Coastguard Worker   inflateEnd(&stream);
39*86ee64e7SAndroid Build Coastguard Worker 
40*86ee64e7SAndroid Build Coastguard Worker   return 0;
41*86ee64e7SAndroid Build Coastguard Worker }
42