Home | History | Annotate | Download | only in bsdiff
      1 // Copyright 2018 The Chromium OS Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include <iostream>
      6 #include <memory>
      7 #include <vector>
      8 
      9 #include "bsdiff/bspatch.h"
     10 #include "bsdiff/memory_file.h"
     11 #include "bsdiff/sink_file.h"
     12 
     13 namespace {
     14 
     15 void FuzzBspatch(const uint8_t* data, size_t size) {
     16   const size_t kBufferSize = 1024;
     17   std::vector<uint8_t> source_buffer(kBufferSize);
     18   std::unique_ptr<bsdiff::FileInterface> source(
     19       new bsdiff::MemoryFile(source_buffer.data(), source_buffer.size()));
     20   std::unique_ptr<bsdiff::FileInterface> target(new bsdiff::SinkFile(
     21       [](const uint8_t* data, size_t size) { return size; }));
     22   bsdiff::bspatch(source, target, data, size);
     23 }
     24 
     25 struct Environment {
     26   Environment() {
     27     // To turn off logging for bsdiff library.
     28     std::cerr.setstate(std::ios_base::failbit);
     29   }
     30 };
     31 
     32 }  // namespace
     33 
     34 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
     35   static Environment env;
     36   FuzzBspatch(data, size);
     37   return 0;
     38 }
     39