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 Workerextern "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