From cdf1ef3c217e2871c8efefbf7ac74dc00f706a44 Mon Sep 17 00:00:00 2001 From: A0su Date: Mon, 23 Mar 2026 21:45:26 -0500 Subject: [PATCH 1/2] refactor _PyRun_SimpleStringFlagsWithName to follow goto pattern in _PyRun_SimpleFileObject --- Python/pythonrun.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Python/pythonrun.c b/Python/pythonrun.c index a21f494dc69d82..663f9608d2ddff 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -554,32 +554,39 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, int _PyRun_SimpleStringFlagsWithName(const char *command, const char* name, PyCompilerFlags *flags) { + int ret = -1; + PyObject *main_module = PyImport_AddModuleRef("__main__"); if (main_module == NULL) { - return -1; + return ret; } PyObject *dict = PyModule_GetDict(main_module); // borrowed ref + PyObject *the_name = NULL; PyObject *res = NULL; if (name == NULL) { res = PyRun_StringFlags(command, Py_file_input, dict, dict, flags); } else { - PyObject* the_name = PyUnicode_FromString(name); - if (!the_name) { + the_name = PyUnicode_FromString(name); + if (the_name == NULL) { PyErr_Print(); - return -1; + goto done; } res = _PyRun_StringFlagsWithName(command, the_name, Py_file_input, dict, dict, flags, 0); - Py_DECREF(the_name); } - Py_DECREF(main_module); if (res == NULL) { PyErr_Print(); - return -1; + goto done; } - Py_DECREF(res); - return 0; + ret = 0; + + done: + Py_DECREF(main_module); + Py_XDECREF(the_name); + Py_XDECREF(res); + + return ret; } int From 4c99feb15a6f93784f97a8855f5e495a3890b1a0 Mon Sep 17 00:00:00 2001 From: A0su Date: Tue, 24 Mar 2026 10:33:18 -0500 Subject: [PATCH 2/2] change to single line fix adding main_module decref --- Python/pythonrun.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 663f9608d2ddff..1e327848e656af 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -554,39 +554,33 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, int _PyRun_SimpleStringFlagsWithName(const char *command, const char* name, PyCompilerFlags *flags) { - int ret = -1; - PyObject *main_module = PyImport_AddModuleRef("__main__"); if (main_module == NULL) { - return ret; + return -1; } PyObject *dict = PyModule_GetDict(main_module); // borrowed ref - PyObject *the_name = NULL; PyObject *res = NULL; if (name == NULL) { res = PyRun_StringFlags(command, Py_file_input, dict, dict, flags); } else { - the_name = PyUnicode_FromString(name); - if (the_name == NULL) { + PyObject* the_name = PyUnicode_FromString(name); + if (!the_name) { PyErr_Print(); - goto done; + Py_DECREF(main_module); + return -1; } res = _PyRun_StringFlagsWithName(command, the_name, Py_file_input, dict, dict, flags, 0); + Py_DECREF(the_name); } + Py_DECREF(main_module); if (res == NULL) { PyErr_Print(); - goto done; + return -1; } - ret = 0; - - done: - Py_DECREF(main_module); - Py_XDECREF(the_name); - Py_XDECREF(res); - - return ret; + Py_DECREF(res); + return 0; } int