Skip to content

Commit 13baa66

Browse files
committed
gh-142776: Ensure fp file descriptor is closed on all code paths in import.c
1 parent bef63d2 commit 13baa66

File tree

1 file changed

+3
-9
lines changed

1 file changed

+3
-9
lines changed

Python/import.c

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4804,16 +4804,13 @@ _imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file)
48044804
/* We would move this (and the fclose() below) into
48054805
* _PyImport_GetModuleExportHooks(), but it isn't clear if the intervening
48064806
* code relies on fp still being open. */
4807-
FILE *fp;
4807+
FILE *fp = NULL;
48084808
if (file != NULL) {
48094809
fp = Py_fopen(info.filename, "r");
48104810
if (fp == NULL) {
48114811
goto finally;
48124812
}
48134813
}
4814-
else {
4815-
fp = NULL;
4816-
}
48174814

48184815
PyModInitFunction p0 = NULL;
48194816
PyModExportFunction ex0 = NULL;
@@ -4822,7 +4819,7 @@ _imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file)
48224819
mod = import_run_modexport(tstate, ex0, &info, spec);
48234820
// Modules created from slots handle GIL enablement (Py_mod_gil slot)
48244821
// when they're created.
4825-
goto cleanup;
4822+
goto finally;
48264823
}
48274824
if (p0 == NULL) {
48284825
goto finally;
@@ -4845,13 +4842,10 @@ _imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file)
48454842
}
48464843
#endif
48474844

4848-
cleanup:
4849-
// XXX Shouldn't this happen in the error cases too (i.e. in "finally")?
4845+
finally:
48504846
if (fp) {
48514847
fclose(fp);
48524848
}
4853-
4854-
finally:
48554849
_Py_ext_module_loader_info_clear(&info);
48564850
return mod;
48574851
}

0 commit comments

Comments
 (0)