diff options
author | Guido van Rossum <guido@python.org> | 2000-06-28 23:24:19 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2000-06-28 23:24:19 (GMT) |
commit | 98626cd7ac22f2a77eaa68bc53e2ac27c67d9fa4 (patch) | |
tree | 0afa7b7f9c5870ec523299dc1dac70653473210f /Python | |
parent | a04ff0fb53913b1c821dac4278331728dbdbfe51 (diff) | |
download | cpython-98626cd7ac22f2a77eaa68bc53e2ac27c67d9fa4.zip cpython-98626cd7ac22f2a77eaa68bc53e2ac27c67d9fa4.tar.gz cpython-98626cd7ac22f2a77eaa68bc53e2ac27c67d9fa4.tar.bz2 |
Urmpf. Quality control on this patch lapsed a bit. :-(
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.)
Diffstat (limited to 'Python')
-rw-r--r-- | Python/marshal.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/Python/marshal.c b/Python/marshal.c index a316d18..46b3fa0 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -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); } |