Skip to content

Commit f0f93da

Browse files
committed
Dehydrate as needed for TYPE_REF, with debug printing
1 parent e9f7ca1 commit f0f93da

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

Python/marshal.c

+19-1
Original file line numberDiff line numberDiff line change
@@ -1569,7 +1569,25 @@ r_object(RFILE *p)
15691569
PyErr_SetString(PyExc_ValueError, "bad marshal data (invalid reference)");
15701570
break;
15711571
}
1572-
v = PyList_GET_ITEM(p->refs, n);
1572+
for (;;) {
1573+
v = PyList_GET_ITEM(p->refs, n);
1574+
if (!PyCode_Check(v))
1575+
break;
1576+
PyCodeObject *code = (PyCodeObject *)v;
1577+
if (_PyCode_IsHydrated(code)) {
1578+
printf("Not dehydrated!\n");
1579+
break;
1580+
}
1581+
printf("It's a dehydrated code object! %s - %d - %s\n",
1582+
PyUnicode_AsUTF8(code->co_filename),
1583+
code->co_firstlineno,
1584+
PyUnicode_AsUTF8(code->co_qualname));
1585+
v = (PyObject *)_PyCode_Hydrate(code);
1586+
if (v == NULL)
1587+
break;
1588+
}
1589+
if (v == NULL)
1590+
break;
15731591
if (v == Py_None) {
15741592
PyErr_SetString(PyExc_ValueError, "bad marshal data (invalid reference)");
15751593
break;

0 commit comments

Comments
 (0)