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