]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #19428: Handle PyMarshal_Read*() errors in run_pyc_file()
authorVictor Stinner <victor.stinner@gmail.com>
Wed, 18 Mar 2015 12:56:25 +0000 (13:56 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Wed, 18 Mar 2015 12:56:25 +0000 (13:56 +0100)
Detect also earlier PyMarshal_Read*() errors in zipimport.

Modules/zipimport.c
Python/pythonrun.c

index f5ac10beb0b55490982424bab2fe10824ddbbbd5..e83214c16cfe4ce19c52ecc316ccedbfd8d4965d 100644 (file)
@@ -939,6 +939,9 @@ read_directory(PyObject *archive)
         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;
index 992a5a3ed09ca388de44d8d5c52062308ac5e1ea..a8bd02440f5da15370cc55c136ed0f5209ab3376 100644 (file)
@@ -981,13 +981,17 @@ run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
 
     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);