##// END OF EJS Templates
rewriteutil: check for divergence...
rewriteutil: check for divergence This code is adapted from the code in the evolve extension. It seems to be equivalent as far as the evolve extension's test suite can tell (the only impact when making their `precheck()` delegate to our version is that error messages are less detailed). I had to change the error message to work with "change branch of" being inserted as the action. Differential Revision: https://phab.mercurial-scm.org/D10518

File last commit:

r44311:8766728d default
r47784:ba6881c6 default
Show More
fm1readmarkers.cc
59 lines | 1.4 KiB | text/x-c | CppLexer
Augie Fackler
fuzz: new fuzzer for parsers.fm1readmarkers...
r41053 #include <Python.h>
#include <assert.h>
#include <stdlib.h>
#include <unistd.h>
#include <string>
#include "pyutil.h"
extern "C" {
Augie Fackler
fuzz: add support for fuzzing under either Python 2 or 3...
r44311 static PYCODETYPE *code;
Augie Fackler
fuzz: new fuzzer for parsers.fm1readmarkers...
r41053
extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv)
{
contrib::initpy(*argv[0]);
Augie Fackler
fuzz: add support for fuzzing under either Python 2 or 3...
r44311 code = (PYCODETYPE *)Py_CompileString(R"py(
Augie Fackler
fuzz: new fuzzer for parsers.fm1readmarkers...
r41053 def maybeint(s, default):
try:
return int(s)
except ValueError:
return default
try:
parts = data.split('\0', 2)
if len(parts) == 3:
offset, stop, data = parts
elif len(parts) == 2:
stop, data = parts
offset = 0
else:
offset = stop = 0
offset, stop = maybeint(offset, 0), maybeint(stop, len(data))
Augie Fackler
fuzz: add support for fuzzing under either Python 2 or 3...
r44311 parsers.fm1readmarkers(data, offset, stop)
Augie Fackler
fuzz: new fuzzer for parsers.fm1readmarkers...
r41053 except Exception as e:
pass
# uncomment this print if you're editing this Python code
# to debug failures.
# print e
)py",
Augie Fackler
fuzz: add support for fuzzing under either Python 2 or 3...
r44311 "fuzzer", Py_file_input);
Augie Fackler
fuzz: new fuzzer for parsers.fm1readmarkers...
r41053 return 0;
}
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
{
PyObject *text =
PyBytes_FromStringAndSize((const char *)Data, (Py_ssize_t)Size);
PyObject *locals = PyDict_New();
PyDict_SetItemString(locals, "data", text);
PyObject *res = PyEval_EvalCode(code, contrib::pyglobals(), locals);
if (!res) {
PyErr_Print();
}
Py_XDECREF(res);
Py_DECREF(locals);
Py_DECREF(text);
return 0; // Non-zero return values are reserved for future use.
}
}