##// END OF EJS Templates
phases: avoid N² behavior in `advanceboundary`...
phases: avoid N² behavior in `advanceboundary` We allowed duplicated entries in the deque, which each entry could potentially insert all its ancestors. So advancing boundary for the full repository would mean each revision would walk all its ancestors, resulting in O(N²) iteration. For repository of any decent size, N² is quickly insane. We introduce a simple set to avoid this and get back to reasonable performance.

File last commit:

r44255:7857bd9b default
r52398:c9ceb4f6 6.7 stable
Show More
bdiff.cc
39 lines | 969 B | text/x-c | CppLexer
Augie Fackler
contrib: add some basic scaffolding for some fuzz test targets...
r35688 /*
* 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.
*/
Augie Fackler
fuzz: extract some common utilities and use modern C++ idioms...
r38191 #include <memory>
Augie Fackler
contrib: add some basic scaffolding for some fuzz test targets...
r35688 #include <stdlib.h>
Augie Fackler
fuzz: use a more standard approach to allow local builds of fuzzers...
r44265 #include "FuzzedDataProvider.h"
Augie Fackler
fuzz: extract some common utilities and use modern C++ idioms...
r38191
Augie Fackler
contrib: add some basic scaffolding for some fuzz test targets...
r35688 extern "C" {
#include "bdiff.h"
Augie Fackler
fuzz: always define LLVMFuzzerInitialize() even if we don't need it...
r44261 extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv)
{
return 0;
}
Augie Fackler
contrib: add some basic scaffolding for some fuzz test targets...
r35688 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
{
Augie Fackler
fuzz: migrate bdiff fuzzer to use FuzzedDataProvider...
r44011 FuzzedDataProvider provider(Data, Size);
std::string left = provider.ConsumeRandomLengthString(Size);
std::string right = provider.ConsumeRemainingBytesAsString();
Augie Fackler
contrib: add some basic scaffolding for some fuzz test targets...
r35688
struct bdiff_line *a, *b;
Augie Fackler
fuzz: migrate bdiff fuzzer to use FuzzedDataProvider...
r44011 int an = bdiff_splitlines(left.c_str(), left.size(), &a);
int bn = bdiff_splitlines(right.c_str(), right.size(), &b);
Augie Fackler
contrib: add some basic scaffolding for some fuzz test targets...
r35688 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.
}
} // extern "C"