summaryrefslogtreecommitdiffstats
path: root/Modules/_xxtestfuzz
diff options
context:
space:
mode:
authorAmmar Askar <ammar@ammaraskar.com>2023-09-26 22:35:49 (GMT)
committerGitHub <noreply@github.com>2023-09-26 22:35:49 (GMT)
commita829356f86d597e4dfe92e236a6d711c8a464f16 (patch)
treeaf1775fa0e1d15cbaf573024c94da731be93592b /Modules/_xxtestfuzz
parent9dbfe2dc8e7bba25e52f9470ae6969821a365297 (diff)
downloadcpython-a829356f86d597e4dfe92e236a6d711c8a464f16.zip
cpython-a829356f86d597e4dfe92e236a6d711c8a464f16.tar.gz
cpython-a829356f86d597e4dfe92e236a6d711c8a464f16.tar.bz2
gh-109098: Fuzz re module instead of internal sre (#109911)
* gh-109098: Fuzz re module instead of internal sre * Fix c-analyzer globals test failure * Put globals exception in ignored.tsv
Diffstat (limited to 'Modules/_xxtestfuzz')
-rw-r--r--Modules/_xxtestfuzz/fuzzer.c45
1 files changed, 18 insertions, 27 deletions
diff --git a/Modules/_xxtestfuzz/fuzzer.c b/Modules/_xxtestfuzz/fuzzer.c
index 54f8a42..816ba09 100644
--- a/Modules/_xxtestfuzz/fuzzer.c
+++ b/Modules/_xxtestfuzz/fuzzer.c
@@ -193,37 +193,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) {
@@ -236,7 +232,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);
@@ -249,9 +245,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)) {
@@ -267,7 +263,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();
}
@@ -531,13 +527,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
#if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_fuzz_sre_compile)
static int SRE_COMPILE_INITIALIZED = 0;
if (!SRE_COMPILE_INITIALIZED && !init_sre_compile()) {
- if (!PyErr_ExceptionMatches(PyExc_DeprecationWarning)) {
- PyErr_Print();
- abort();
- }
- else {
- PyErr_Clear();
- }
+ PyErr_Print();
+ abort();
} else {
SRE_COMPILE_INITIALIZED = 1;
}