[Python-checkins] cpython: Issue #19428: Handle PyMarshal_Read*() errors in run_pyc_file()

victor.stinner python-checkins at python.org
Wed Mar 18 13:59:10 CET 2015


https://hg.python.org/cpython/rev/1e4605542ac4
changeset: 95034:1e4605542ac4
user: Victor Stinner <victor.stinner at gmail.com>
date: Wed Mar 18 13:56:25 2015 +0100
summary:
 Issue #19428: Handle PyMarshal_Read*() errors in run_pyc_file()
Detect also earlier PyMarshal_Read*() errors in zipimport.
files:
 Modules/zipimport.c | 3 +++
 Python/pythonrun.c | 8 ++++++--
 2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/Modules/zipimport.c b/Modules/zipimport.c
--- a/Modules/zipimport.c
+++ b/Modules/zipimport.c
@@ -939,6 +939,9 @@
 header_size = name_size +
 PyMarshal_ReadShortFromFile(fp) +
 PyMarshal_ReadShortFromFile(fp);
+ if (PyErr_Occurred())
+ goto error;
+
 if (fread(dummy, 1, 8, fp) != 8) /* Skip unused fields, avoid fseek */
 goto file_error;
 file_offset = PyMarshal_ReadLongFromFile(fp) + arc_offset;
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -981,13 +981,17 @@
 
 magic = PyMarshal_ReadLongFromFile(fp);
 if (magic != PyImport_GetMagicNumber()) {
- PyErr_SetString(PyExc_RuntimeError,
- "Bad magic number in .pyc file");
+ if (!PyErr_Occurred())
+ PyErr_SetString(PyExc_RuntimeError,
+ "Bad magic number in .pyc file");
 return NULL;
 }
 /* Skip mtime and size */
 (void) PyMarshal_ReadLongFromFile(fp);
 (void) PyMarshal_ReadLongFromFile(fp);
+ if (PyErr_Occurred())
+ return NULL;
+
 v = PyMarshal_ReadLastObjectFromFile(fp);
 if (v == NULL || !PyCode_Check(v)) {
 Py_XDECREF(v);
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /