##// END OF EJS Templates
compat: initialize LC_CTYPE locale on all Python versions and platforms...
compat: initialize LC_CTYPE locale on all Python versions and platforms Previously, the LC_CTYPE locale was not initialized according to user settings on all Python versions (e.g. never on Python 2) and platforms (e.g. not on some Python < 3.8 on Windows). This broke e.g. non-ASCII filenames passed to the Subversion bindings on Python 2, resulting in error messages like "file:///tmp/a%C3%A4 does not look like a Subversion repository to libsvn version 1.14.0". The following command could be used to test this functionality. Adding it to the test suite would be pointless, as the locale is always set to "C" during test runs. @command(b'check_initial_codeset', norepo=True) def check_initial_codeset(ui): codeset1 = locale.nl_langinfo(locale.CODESET) locale.setlocale(locale.LC_ALL, '') codeset2 = locale.nl_langinfo(locale.CODESET) assert codeset1 == codeset2

File last commit:

r44311:8766728d default
r45538:a25343d1 default
Show More
revlog.cc
61 lines | 1.6 KiB | text/x-c | CppLexer
Augie Fackler
fuzz: new fuzzer for revlog's parse_index2 method...
r41050 #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 revlog's parse_index2 method...
r41050
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 revlog's parse_index2 method...
r41050 for inline in (True, False):
try:
Augie Fackler
fuzz: add support for fuzzing under either Python 2 or 3...
r44311 index, cache = parsers.parse_index2(data, inline)
Augie Fackler
fuzz: exercise more of the revlog API...
r41340 index.slicechunktodensity(list(range(len(index))), 0.5, 262144)
Augie Fackler
fuzz: exercise a little more revlog code...
r43421 index.stats()
index.findsnapshots({}, 0)
10 in index
Augie Fackler
fuzz: exercise more of the revlog API...
r41340 for rev in range(len(index)):
Augie Fackler
fuzz: exercise a little more revlog code...
r43421 index.reachableroots(0, [len(index)-1], [rev])
Augie Fackler
fuzz: exercise more of the revlog API...
r41340 node = index[rev][7]
partial = index.shortest(node)
index.partialmatch(node[:partial])
Augie Fackler
fuzz: exercise a little more revlog code...
r43421 index.deltachain(rev, None, True)
Augie Fackler
fuzz: new fuzzer for revlog's parse_index2 method...
r41050 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 revlog's parse_index2 method...
r41050 return 0;
}
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
{
Augie Fackler
fuzz: don't allow enormous revlog inputs either...
r41339 // Don't allow fuzzer inputs larger than 60k, since we'll just bog
// down and not accomplish much.
if (Size > 60000) {
return 0;
}
Augie Fackler
fuzz: new fuzzer for revlog's parse_index2 method...
r41050 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.
}
}