[3.11] gh-109098: Fuzz re module instead of internal sre (GH-109911) (GH-109933)

* Fix c-analyzer globals test failure
* Put globals exception in ignored.tsv
(cherry picked from commit a829356f86)

Co-authored-by: Ammar Askar <ammar@ammaraskar.com>
This commit is contained in:
Miss Islington (bot) 2023-09-26 23:15:40 -07:00 committed by GitHub
parent c485715ba8
commit 8ed9bda519
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 23 deletions

View File

@ -188,37 +188,33 @@ static int fuzz_json_loads(const char* data, size_t size) {
#define MAX_RE_TEST_SIZE 0x10000
PyObject* sre_compile_method = NULL;
PyObject* sre_error_exception = NULL;
int SRE_FLAG_DEBUG = 0;
PyObject* re_compile_method = NULL;
PyObject* re_error_exception = NULL;
int RE_FLAG_DEBUG = 0;
/* Called by LLVMFuzzerTestOneInput for initialization */
static int init_sre_compile(void) {
/* Import sre_compile.compile and sre.error */
PyObject* sre_compile_module = PyImport_ImportModule("sre_compile");
if (sre_compile_module == NULL) {
PyObject* re_module = PyImport_ImportModule("re");
if (re_module == NULL) {
return 0;
}
sre_compile_method = PyObject_GetAttrString(sre_compile_module, "compile");
if (sre_compile_method == NULL) {
re_compile_method = PyObject_GetAttrString(re_module, "compile");
if (re_compile_method == NULL) {
return 0;
}
PyObject* sre_constants = PyImport_ImportModule("sre_constants");
if (sre_constants == NULL) {
re_error_exception = PyObject_GetAttrString(re_module, "error");
if (re_error_exception == NULL) {
return 0;
}
sre_error_exception = PyObject_GetAttrString(sre_constants, "error");
if (sre_error_exception == NULL) {
return 0;
}
PyObject* debug_flag = PyObject_GetAttrString(sre_constants, "SRE_FLAG_DEBUG");
PyObject* debug_flag = PyObject_GetAttrString(re_module, "DEBUG");
if (debug_flag == NULL) {
return 0;
}
SRE_FLAG_DEBUG = PyLong_AsLong(debug_flag);
RE_FLAG_DEBUG = PyLong_AsLong(debug_flag);
return 1;
}
/* Fuzz _sre.compile(x) */
/* Fuzz re.compile(x) */
static int fuzz_sre_compile(const char* data, size_t size) {
/* Ignore really long regex patterns that will timeout the fuzzer */
if (size > MAX_RE_TEST_SIZE) {
@ -231,7 +227,7 @@ static int fuzz_sre_compile(const char* data, size_t size) {
uint16_t flags = ((uint16_t*) data)[0];
/* We remove the SRE_FLAG_DEBUG if present. This is because it
prints to stdout which greatly decreases fuzzing speed */
flags &= ~SRE_FLAG_DEBUG;
flags &= ~RE_FLAG_DEBUG;
/* Pull the pattern from the remaining bytes */
PyObject* pattern_bytes = PyBytes_FromStringAndSize(data + 2, size - 2);
@ -244,9 +240,9 @@ static int fuzz_sre_compile(const char* data, size_t size) {
return 0;
}
/* compiled = _sre.compile(data[2:], data[0:2] */
/* compiled = re.compile(data[2:], data[0:2] */
PyObject* compiled = PyObject_CallFunctionObjArgs(
sre_compile_method, pattern_bytes, flags_obj, NULL);
re_compile_method, pattern_bytes, flags_obj, NULL);
/* Ignore ValueError as the fuzzer will more than likely
generate some invalid combination of flags */
if (compiled == NULL && PyErr_ExceptionMatches(PyExc_ValueError)) {
@ -262,7 +258,7 @@ static int fuzz_sre_compile(const char* data, size_t size) {
PyErr_Clear();
}
/* Ignore re.error */
if (compiled == NULL && PyErr_ExceptionMatches(sre_error_exception)) {
if (compiled == NULL && PyErr_ExceptionMatches(re_error_exception)) {
PyErr_Clear();
}

View File

@ -243,15 +243,15 @@ Modules/_testmultiphase.c - testexport_methods -
Modules/_testmultiphase.c - uninitialized_def -
Modules/_xxtestfuzz/_xxtestfuzz.c - _fuzzmodule -
Modules/_xxtestfuzz/_xxtestfuzz.c - module_methods -
Modules/_xxtestfuzz/fuzzer.c - SRE_FLAG_DEBUG -
Modules/_xxtestfuzz/fuzzer.c - RE_FLAG_DEBUG -
Modules/_xxtestfuzz/fuzzer.c - ast_literal_eval_method -
Modules/_xxtestfuzz/fuzzer.c - compiled_patterns -
Modules/_xxtestfuzz/fuzzer.c - csv_error -
Modules/_xxtestfuzz/fuzzer.c - csv_module -
Modules/_xxtestfuzz/fuzzer.c - json_loads_method -
Modules/_xxtestfuzz/fuzzer.c - regex_patterns -
Modules/_xxtestfuzz/fuzzer.c - sre_compile_method -
Modules/_xxtestfuzz/fuzzer.c - sre_error_exception -
Modules/_xxtestfuzz/fuzzer.c - re_compile_method -
Modules/_xxtestfuzz/fuzzer.c - re_error_exception -
Modules/_xxtestfuzz/fuzzer.c - struct_error -
Modules/_xxtestfuzz/fuzzer.c - struct_unpack_method -
Modules/_xxtestfuzz/fuzzer.c LLVMFuzzerTestOneInput CSV_READER_INITIALIZED -

Can't render this file because it has a wrong number of fields in line 4.