mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Merged revisions 82937 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r82937 | alexander.belopolsky | 2010-07-17 18:50:45 -0400 (Sat, 17 Jul 2010) | 3 lines Issue #5180: Fixed a bug that prevented loading 2.x pickles in 3.x python when they contain instances of old-style classes. ........
This commit is contained in:
parent
6fd1df8c44
commit
82a6bf049e
4 changed files with 90 additions and 37 deletions
|
@ -1034,19 +1034,15 @@ class _Unpickler:
|
|||
def _instantiate(self, klass, k):
|
||||
args = tuple(self.stack[k+1:])
|
||||
del self.stack[k:]
|
||||
instantiated = False
|
||||
if (not args and
|
||||
isinstance(klass, type) and
|
||||
not hasattr(klass, "__getinitargs__")):
|
||||
value = _EmptyClass()
|
||||
value.__class__ = klass
|
||||
instantiated = True
|
||||
if not instantiated:
|
||||
if (args or not isinstance(klass, type) or
|
||||
hasattr(klass, "__getinitargs__")):
|
||||
try:
|
||||
value = klass(*args)
|
||||
except TypeError as err:
|
||||
raise TypeError("in constructor for %s: %s" %
|
||||
(klass.__name__, str(err)), sys.exc_info()[2])
|
||||
else:
|
||||
value = klass.__new__(klass)
|
||||
self.append(value)
|
||||
|
||||
def load_inst(self):
|
||||
|
@ -1239,11 +1235,6 @@ class _Unpickler:
|
|||
raise _Stop(value)
|
||||
dispatch[STOP[0]] = load_stop
|
||||
|
||||
# Helper class for load_inst/load_obj
|
||||
|
||||
class _EmptyClass:
|
||||
pass
|
||||
|
||||
# Encode/decode longs in linear time.
|
||||
|
||||
import binascii as _binascii
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue