Mercurial > cpython-lru_cache-weakref
diff Python/pythonrun.c @ 80292:4ebe1ede981e 2.7
Issue #15001: fix segfault on "del sys.modules['__main__']"
Patch by Victor Stinner.
| author | Hynek Schlawack <hs@ox.cx> |
|---|---|
| date | Wed, 07 Nov 2012 09:41:28 +0100 |
| parents | 013766e7a6eb |
| children | dc9f17f10899 |
line wrap: on
line diff
--- a/Python/pythonrun.c Mon Nov 05 00:55:06 2012 +0100 +++ b/Python/pythonrun.c Wed Nov 07 09:41:28 2012 +0100 @@ -907,19 +907,20 @@ { PyObject *m, *d, *v; const char *ext; - int set_file_name = 0, ret, len; + int set_file_name = 0, len, ret = -1; m = PyImport_AddModule("__main__"); if (m == NULL) return -1; + Py_INCREF(m); d = PyModule_GetDict(m); if (PyDict_GetItemString(d, "__file__") == NULL) { PyObject *f = PyString_FromString(filename); if (f == NULL) - return -1; + goto done; if (PyDict_SetItemString(d, "__file__", f) < 0) { Py_DECREF(f); - return -1; + goto done; } set_file_name = 1; Py_DECREF(f); @@ -932,7 +933,6 @@ fclose(fp); if ((fp = fopen(filename, "rb")) == NULL) { fprintf(stderr, "python: Can't reopen .pyc file\n"); - ret = -1; goto done; } /* Turn on optimization if a .pyo file is given */ @@ -945,7 +945,6 @@ } if (v == NULL) { PyErr_Print(); - ret = -1; goto done; } Py_DECREF(v); @@ -955,6 +954,7 @@ done: if (set_file_name && PyDict_DelItemString(d, "__file__")) PyErr_Clear(); + Py_DECREF(m); return ret; }
