]> granicus.if.org Git - python/commitdiff
bpo-34170: Fix pymain_run_file() (GH-8660)
authorVictor Stinner <vstinner@redhat.com>
Fri, 3 Aug 2018 21:54:06 +0000 (23:54 +0200)
committerGitHub <noreply@github.com>
Fri, 3 Aug 2018 21:54:06 +0000 (23:54 +0200)
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

index 06aa1124c796e18f3994d265d33e3aeba8c532b9..da3441f3c96e047b3e5f14f6c1731391959536ef 100644 (file)
@@ -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 = "<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);
     pymain->status = (run != 0);
-
-done:
-    fclose(fp);
 }