Commit d8078626 authored by Victor Stinner's avatar Victor Stinner Committed by GitHub

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.
parent 46dc4e34
...@@ -1129,14 +1129,16 @@ pymain_run_file(_PyMain *pymain, _PyCoreConfig *config, PyCompilerFlags *cf) ...@@ -1129,14 +1129,16 @@ pymain_run_file(_PyMain *pymain, _PyCoreConfig *config, PyCompilerFlags *cf)
"%ls: '%ls' is a directory, cannot continue\n", "%ls: '%ls' is a directory, cannot continue\n",
config->program, filename); config->program, filename);
pymain->status = 1; pymain->status = 1;
goto done; fclose(fp);
return;
} }
/* call pending calls like signal handlers (SIGINT) */ /* call pending calls like signal handlers (SIGINT) */
if (Py_MakePendingCalls() == -1) { if (Py_MakePendingCalls() == -1) {
PyErr_Print(); PyErr_Print();
pymain->status = 1; pymain->status = 1;
goto done; fclose(fp);
return;
} }
PyObject *unicode, *bytes = NULL; PyObject *unicode, *bytes = NULL;
...@@ -1155,12 +1157,10 @@ pymain_run_file(_PyMain *pymain, _PyCoreConfig *config, PyCompilerFlags *cf) ...@@ -1155,12 +1157,10 @@ pymain_run_file(_PyMain *pymain, _PyCoreConfig *config, PyCompilerFlags *cf)
filename_str = "<filename encoding error>"; filename_str = "<filename encoding error>";
} }
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); Py_XDECREF(bytes);
pymain->status = (run != 0); pymain->status = (run != 0);
done:
fclose(fp);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment