/src/mercurial/contrib/fuzz/bdiff.cc
Line | Count | Source |
1 | | /* |
2 | | * bdiff.cc - fuzzer harness for bdiff.c |
3 | | * |
4 | | * Copyright 2018, Google Inc. |
5 | | * |
6 | | * This software may be used and distributed according to the terms of |
7 | | * the GNU General Public License, incorporated herein by reference. |
8 | | */ |
9 | | #include <memory> |
10 | | #include <stdlib.h> |
11 | | |
12 | | #include "FuzzedDataProvider.h" |
13 | | |
14 | | extern "C" { |
15 | | #include "bdiff.h" |
16 | | |
17 | | extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) |
18 | 16 | { |
19 | 16 | return 0; |
20 | 16 | } |
21 | | |
22 | | int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) |
23 | 1.61k | { |
24 | 1.61k | FuzzedDataProvider provider(Data, Size); |
25 | 1.61k | std::string left = provider.ConsumeRandomLengthString(Size); |
26 | 1.61k | std::string right = provider.ConsumeRemainingBytesAsString(); |
27 | | |
28 | 1.61k | struct bdiff_line *a, *b; |
29 | 1.61k | int an = bdiff_splitlines(left.c_str(), left.size(), &a); |
30 | 1.61k | int bn = bdiff_splitlines(right.c_str(), right.size(), &b); |
31 | 1.61k | struct bdiff_hunk l; |
32 | 1.61k | bdiff_diff(a, an, b, bn, &l); |
33 | 1.61k | free(a); |
34 | 1.61k | free(b); |
35 | 1.61k | bdiff_freehunks(l.next); |
36 | 1.61k | return 0; // Non-zero return values are reserved for future use. |
37 | 1.61k | } |
38 | | |
39 | | } // extern "C" |