]> granicus.if.org Git - python/commitdiff
Urmpf. Quality control on this patch lapsed a bit. :-(
authorGuido van Rossum <guido@python.org>
Wed, 28 Jun 2000 23:24:19 +0000 (23:24 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 28 Jun 2000 23:24:19 +0000 (23:24 +0000)
The depth field was never decremented inside w_object(), and it was
never initialized in PyMarshal_WriteObjectToFile().

This caused imports from .pyc files to fil mysteriously when the .pyc
file was written by the broken code -- w_object() would bail out
early, but PyMarshal_WriteObjectToFile() doesn't check the error or
return an error code, and apparently the marshalling code doesn't call
PyErr_Check() either.  (That's a separate patch if I feel like it.)

Python/marshal.c

index a316d18e696bd144ca8a4a3044566ded94b0d059..46b3fa09af39874cc32e8b6256adc1c8c416b7aa 100644 (file)
@@ -234,8 +234,9 @@ w_object(v, p)
                PyObject *utf8;
                utf8 = PyUnicode_AsUTF8String(v);
                if (utf8 == NULL) {
-                   p->error = 1;
-                   return;
+                       p->depth--;
+                       p->error = 1;
+                       return;
                }
                w_byte(TYPE_UNICODE, p);
                n = PyString_GET_SIZE(utf8);
@@ -303,6 +304,8 @@ w_object(v, p)
                w_byte(TYPE_UNKNOWN, p);
                p->error = 1;
        }
+
+       p->depth--;
 }
 
 void
@@ -325,6 +328,7 @@ PyMarshal_WriteObjectToFile(x, fp)
        WFILE wf;
        wf.fp = fp;
        wf.error = 0;
+       wf.depth = 0;
        w_object(x, &wf);
 }