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.)
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);
w_byte(TYPE_UNKNOWN, p);
p->error = 1;
}
+
+ p->depth--;
}
void
WFILE wf;
wf.fp = fp;
wf.error = 0;
+ wf.depth = 0;
w_object(x, &wf);
}