]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-73691: Increase size limits in _xxtestfuzz (#99070)
authorGregory P. Smith <greg@krypto.org>
Thu, 3 Nov 2022 21:41:20 +0000 (14:41 -0700)
committerGitHub <noreply@github.com>
Thu, 3 Nov 2022 21:41:20 +0000 (14:41 -0700)
Now that our int<->str conversions are size limited and we have the
_pylong module handling larger integers, we don't need to limit
everything just to avoid wasting time in the quadratic time DoS-like
case while fuzzing.

We can tweak these further after seeing how this goes.

Modules/_xxtestfuzz/fuzzer.c

index 366e81a54519a7cf485887a19f10dae6345f8f1e..fb0c191d2c494d95d3561fb42f41bd2daa4f4b2a 100644 (file)
@@ -142,7 +142,7 @@ static int fuzz_struct_unpack(const char* data, size_t size) {
 }
 
 
-#define MAX_JSON_TEST_SIZE 0x10000
+#define MAX_JSON_TEST_SIZE 0x100000
 
 PyObject* json_loads_method = NULL;
 /* Called by LLVMFuzzerTestOneInput for initialization */
@@ -335,7 +335,7 @@ static int fuzz_sre_match(const char* data, size_t size) {
     return 0;
 }
 
-#define MAX_CSV_TEST_SIZE 0x10000
+#define MAX_CSV_TEST_SIZE 0x100000
 PyObject* csv_module = NULL;
 PyObject* csv_error = NULL;
 /* Called by LLVMFuzzerTestOneInput for initialization */
@@ -393,7 +393,7 @@ static int fuzz_csv_reader(const char* data, size_t size) {
     return 0;
 }
 
-#define MAX_AST_LITERAL_EVAL_TEST_SIZE 0x10000
+#define MAX_AST_LITERAL_EVAL_TEST_SIZE 0x100000
 PyObject* ast_literal_eval_method = NULL;
 /* Called by LLVMFuzzerTestOneInput for initialization */
 static int init_ast_literal_eval(void) {
@@ -459,6 +459,9 @@ int LLVMFuzzerInitialize(int *argc, char ***argv) {
     PyConfig config;
     PyConfig_InitPythonConfig(&config);
     config.install_signal_handlers = 0;
+    /* Raise the limit above the default allows exercising larger things
+     * now that we fall back to the _pylong module for large values. */
+    config.int_max_str_digits = 8086;
     PyStatus status;
     status = PyConfig_SetBytesString(&config, &config.program_name, *argv[0]);
     if (PyStatus_Exception(status)) {