// Copyright 2017 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include #include #include #include #include #include "zlib.h" static Bytef buffer[256 * 1024] = { 0 }; #ifdef INTENTIONAL_STARTUP_CRASH void bad_term_handler(int signum) { _exit(0); } #endif // Entry point for LibFuzzer. extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { #ifdef INTENTIONAL_STARTUP_CRASH // Simulates the worst case, fuzz target silently dies without any error. struct sigaction action = { 0 }; action.sa_handler = bad_term_handler; sigaction(SIGTERM, &action, NULL); // Cannot call _exit(0) directly, as it's even worse -- sancov does not print // any coverage information in that case. kill(getpid(), SIGTERM); #endif uLongf buffer_length = static_cast(sizeof(buffer)); if (Z_OK != uncompress(buffer, &buffer_length, data, static_cast(size))) { return 0; } return 0; }