diff options
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/cPickle.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/Modules/cPickle.c b/Modules/cPickle.c index 6c7ed99..a0e443e 100644 --- a/Modules/cPickle.c +++ b/Modules/cPickle.c @@ -4473,8 +4473,16 @@ load_build(Unpicklerobject *self) i = 0; while (PyDict_Next(state, &i, &d_key, &d_value)) { - if (PyObject_SetItem(dict, d_key, d_value) < 0) + /* normally the keys for instance attributes are + interned. we should try to do that here. */ + Py_INCREF(d_key); + if (PyString_CheckExact(d_key)) + PyString_InternInPlace(&d_key); + if (PyObject_SetItem(dict, d_key, d_value) < 0) { + Py_DECREF(d_key); goto finally; + } + Py_DECREF(d_key); } Py_DECREF(dict); } |