From d8078626770a8d358eb83d7928c12d75ff4e821a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 3 Aug 2018 23:54:06 +0200 Subject: [PATCH] bpo-34170: Fix pymain_run_file() (GH-8660) bpo-34170, bpo-34326: Fix pymain_run_file(): use PyRun_AnyFileExFlags(closeit=1) instead of calling fclose(fp) explicitly to close the input file before running the code. --- Modules/main.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Modules/main.c b/Modules/main.c index 06aa1124c7..da3441f3c9 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -1129,14 +1129,16 @@ pymain_run_file(_PyMain *pymain, _PyCoreConfig *config, PyCompilerFlags *cf) "%ls: '%ls' is a directory, cannot continue\n", config->program, filename); pymain->status = 1; - goto done; + fclose(fp); + return; } /* call pending calls like signal handlers (SIGINT) */ if (Py_MakePendingCalls() == -1) { PyErr_Print(); pymain->status = 1; - goto done; + fclose(fp); + return; } PyObject *unicode, *bytes = NULL; @@ -1155,12 +1157,10 @@ pymain_run_file(_PyMain *pymain, _PyCoreConfig *config, PyCompilerFlags *cf) filename_str = ""; } - int run = PyRun_AnyFileExFlags(fp, filename_str, 0, cf); + /* PyRun_AnyFileExFlags(closeit=1) calls fclose(fp) before running code */ + int run = PyRun_AnyFileExFlags(fp, filename_str, 1, cf); Py_XDECREF(bytes); pymain->status = (run != 0); - -done: - fclose(fp); } -- 2.40.0