##// END OF EJS Templates
rust: run a clippy pass with the latest stable version...
rust: run a clippy pass with the latest stable version Our current version of clippy is older than the latest stable. The newest version has new lints that are moslty good advice, so let's apply them ahead of time. This has the added benefit of reducing the noise for developpers like myself that use clippy as an IDE helper, as well as being more prepared for a future clippy upgrade.

File last commit:

r45488:ee5f27d7 default
r52013:532e74ad default
Show More
pyutil.cc
76 lines | 1.7 KiB | text/x-c | CppLexer
Augie Fackler
fuzz: extract Python initialization to utility package...
r41049 #include "pyutil.h"
Augie Fackler
fuzz: fix an unused result on getcwd() in pyutil...
r44259 #include <iostream>
Augie Fackler
fuzz: extract Python initialization to utility package...
r41049 #include <string>
namespace contrib
{
Augie Fackler
fuzz: add support for fuzzing under either Python 2 or 3...
r44311 #if PY_MAJOR_VERSION >= 3
#define HG_FUZZER_PY3 1
PyMODINIT_FUNC PyInit_parsers(void);
#else
PyMODINIT_FUNC initparsers(void);
#endif
Augie Fackler
fuzz: extract Python initialization to utility package...
r41049 static char cpypath[8192] = "\0";
static PyObject *mainmod;
static PyObject *globals;
void initpy(const char *cselfpath)
{
Augie Fackler
fuzz: add support for fuzzing under either Python 2 or 3...
r44311 #ifdef HG_FUZZER_PY3
Augie Fackler
pyutil: this has taken so long to fix, I'm using 3.8 now...
r45488 const std::string subdir = "/sanpy/lib/python3.8";
Augie Fackler
fuzz: add support for fuzzing under either Python 2 or 3...
r44311 #else
Augie Fackler
fuzz: extract Python initialization to utility package...
r41049 const std::string subdir = "/sanpy/lib/python2.7";
Augie Fackler
fuzz: add support for fuzzing under either Python 2 or 3...
r44311 #endif
Augie Fackler
fuzz: extract Python initialization to utility package...
r41049 /* HACK ALERT: we need a full Python installation built without
pymalloc and with ASAN, so we dump one in
$OUT/sanpy/lib/python2.7. This helps us wire that up. */
std::string selfpath(cselfpath);
std::string pypath;
auto pos = selfpath.rfind("/");
if (pos == std::string::npos) {
char wd[8192];
Augie Fackler
fuzz: fix an unused result on getcwd() in pyutil...
r44259 if (!getcwd(wd, 8192)) {
std::cerr << "Failed to call getcwd: errno " << errno
<< std::endl;
exit(1);
}
Augie Fackler
fuzz: extract Python initialization to utility package...
r41049 pypath = std::string(wd) + subdir;
} else {
pypath = selfpath.substr(0, pos) + subdir;
}
strncpy(cpypath, pypath.c_str(), pypath.size());
setenv("PYTHONPATH", cpypath, 1);
setenv("PYTHONNOUSERSITE", "1", 1);
/* prevent Python from looking up users in the fuzz environment */
setenv("PYTHONUSERBASE", cpypath, 1);
Augie Fackler
fuzz: add support for fuzzing under either Python 2 or 3...
r44311 #ifdef HG_FUZZER_PY3
std::wstring wcpypath(pypath.begin(), pypath.end());
Py_SetPythonHome(wcpypath.c_str());
#else
Augie Fackler
fuzz: extract Python initialization to utility package...
r41049 Py_SetPythonHome(cpypath);
Augie Fackler
fuzz: add support for fuzzing under either Python 2 or 3...
r44311 #endif
Augie Fackler
fuzz: extract Python initialization to utility package...
r41049 Py_InitializeEx(0);
mainmod = PyImport_AddModule("__main__");
globals = PyModule_GetDict(mainmod);
Augie Fackler
fuzz: add support for fuzzing under either Python 2 or 3...
r44311
#ifdef HG_FUZZER_PY3
PyObject *mod = PyInit_parsers();
#else
Augie Fackler
fuzz: extract Python initialization to utility package...
r41049 initparsers();
Augie Fackler
fuzz: add support for fuzzing under either Python 2 or 3...
r44311 PyObject *mod = PyImport_ImportModule("parsers");
#endif
PyDict_SetItemString(globals, "parsers", mod);
Augie Fackler
fuzz: extract Python initialization to utility package...
r41049 }
PyObject *pyglobals()
{
return globals;
}
} // namespace contrib