|  | // Copyright 2015 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 <stddef.h> | 
|  | #include <stdint.h> | 
|  |  | 
|  | #include "third_party/snappy/src/snappy-sinksource.h" | 
|  | #include "third_party/snappy/src/snappy.h" | 
|  |  | 
|  | // Entry point for LibFuzzer. | 
|  | extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { | 
|  | snappy::ByteArraySource src(reinterpret_cast<const char*>(data), size); | 
|  | uint32_t len; | 
|  | // Note: src is invalid after GetUncompressedLength call. | 
|  | if (!snappy::GetUncompressedLength(&src, &len) || (len > 1E6)) { | 
|  | // We have to bail out, to avoid self-crafted decompression bombs. | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | std::string uncompressed_str; | 
|  | snappy::Uncompress(reinterpret_cast<const char*>(data), size, | 
|  | &uncompressed_str); | 
|  | return 0; | 
|  | } |