##// END OF EJS Templates
transaction: leave unfinished without crashing when not properly released...
transaction: leave unfinished without crashing when not properly released I think the transaction.__del__ is there just as a last resort in case we (or an extension) forgot to release the transaction. When that happens, the repo can (or will on Python 3?) get deleted before the transaction. This leads to a crash in test-devel-warnings.t on Python 3 because we tried to access repo.dirstate, where repo was retried from a weak reference. There's not much we can do here, but let's at least avoid the crash. The user will have run `hg recover` afterwards regardless. Differential Revision: https://phab.mercurial-scm.org/D6664

File last commit:

r38191:fa0ddd5e default
r42894:36c692eb default
Show More
bdiff.cc
44 lines | 1.0 KiB | 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: extract some common utilities and use modern C++ idioms...
r38191 #include "fuzzutil.h"
Augie Fackler
contrib: add some basic scaffolding for some fuzz test targets...
r35688 extern "C" {
#include "bdiff.h"
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
{
Augie Fackler
fuzz: extract some common utilities and use modern C++ idioms...
r38191 auto maybe_inputs = SplitInputs(Data, Size);
if (!maybe_inputs) {
Augie Fackler
contrib: add some basic scaffolding for some fuzz test targets...
r35688 return 0;
}
Augie Fackler
fuzz: extract some common utilities and use modern C++ idioms...
r38191 auto inputs = std::move(maybe_inputs.value());
Augie Fackler
contrib: add some basic scaffolding for some fuzz test targets...
r35688
struct bdiff_line *a, *b;
Augie Fackler
fuzz: extract some common utilities and use modern C++ idioms...
r38191 int an = bdiff_splitlines(inputs.left.get(), inputs.left_size, &a);
int bn = bdiff_splitlines(inputs.right.get(), inputs.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.
}
#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"