##// END OF EJS Templates
packaging: be explicit about Python version in rpm spec...
packaging: be explicit about Python version in rpm spec Fedora 31 has Python3 at /usr/bin/python ... but expect everybody to not just find python in $PATH but be explicit about whether they want python2 or python3. mercurial.spec just used 'python' and would fail when it unknowingly used Python 3 and ended up with Mercurial setup.py reporting "Python 3.7 detected." and talking about the HGPYTHON3 environment variable. For now, just be explicit about using system python2 as python executable when building rpms.

File last commit:

r43423:741fb1a9 default
r43649:92a51a45 stable
Show More
jsonescapeu8fast.cc
57 lines | 1.4 KiB | text/x-c | CppLexer
#include <Python.h>
#include <assert.h>
#include <stdlib.h>
#include <unistd.h>
#include "pyutil.h"
#include <fuzzer/FuzzedDataProvider.h>
#include <iostream>
#include <string>
extern "C" {
static PyCodeObject *code;
extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv)
{
contrib::initpy(*argv[0]);
code = (PyCodeObject *)Py_CompileString(R"py(
from parsers import jsonescapeu8fast
try:
jsonescapeu8fast(data, paranoid)
except Exception as e:
pass
# uncomment this print if you're editing this Python code
# to debug failures.
# print(e)
)py",
"fuzzer", Py_file_input);
if (!code) {
std::cerr << "failed to compile Python code!" << std::endl;
}
return 0;
}
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
{
FuzzedDataProvider provider(Data, Size);
bool paranoid = provider.ConsumeBool();
std::string remainder = provider.ConsumeRemainingBytesAsString();
PyObject *mtext = PyBytes_FromStringAndSize(
(const char *)remainder.c_str(), remainder.size());
PyObject *locals = PyDict_New();
PyDict_SetItemString(locals, "data", mtext);
PyDict_SetItemString(locals, "paranoid", paranoid ? Py_True : Py_False);
PyObject *res = PyEval_EvalCode(code, contrib::pyglobals(), locals);
if (!res) {
PyErr_Print();
}
Py_XDECREF(res);
Py_DECREF(locals);
Py_DECREF(mtext);
return 0; // Non-zero return values are reserved for future use.
}
}