Mercurial > hg
view contrib/fuzz/bdiff.cc @ 36747:4c71a26a4009
sslutil: some more forcebytes() on some exception messages
At this point, test-https.t no longer dumps tracebacks
everywhere. Instead, we get some results that look like we're not
adequately finding things in hg's configuration, which should be
manageable (if somewhat annoying to find and fix.)
Differential Revision: https://phab.mercurial-scm.org/D2690
author | Augie Fackler <augie@google.com> |
---|---|
date | Sun, 04 Mar 2018 21:16:36 -0500 |
parents | 2b9e2415f5b5 |
children | fa0ddd5e8fff |
line wrap: on
line source
/* * bdiff.cc - fuzzer harness for bdiff.c * * Copyright 2018, Google Inc. * * This software may be used and distributed according to the terms of * the GNU General Public License, incorporated herein by reference. */ #include <stdlib.h> extern "C" { #include "bdiff.h" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { if (!Size) { return 0; } // figure out a random point in [0, Size] to split our input. size_t split = Data[0] / 255.0 * Size; // left input to diff is data[1:split] const uint8_t *left = Data + 1; // which has len split-1 size_t left_size = split - 1; // right starts at the next byte after left ends const uint8_t *right = left + left_size; size_t right_size = Size - split; struct bdiff_line *a, *b; int an = bdiff_splitlines((const char *)left, split - 1, &a); int bn = bdiff_splitlines((const char *)right, right_size, &b); struct bdiff_hunk l; bdiff_diff(a, an, b, bn, &l); free(a); free(b); bdiff_freehunks(l.next); return 0; // Non-zero return values are reserved for future use. } #ifdef HG_FUZZER_INCLUDE_MAIN int main(int argc, char **argv) { const char data[] = "asdf"; return LLVMFuzzerTestOneInput((const uint8_t *)data, 4); } #endif } // extern "C"