Commit 766d7cb0 authored by Guido van Rossum's avatar Guido van Rossum

Address SF #451547. The approach is a bit draconian: any object that

is pickled as a global must now exist by the name under which it is
pickled, otherwise the pickling fails.  Previously, such things would
fail on unpickling, or unpickle as the wrong global object.  I'm
hoping that this won't break existing code that is playing tricks with
this.

I need a volunteer to do this for cPickle too.
parent 5bdec473
......@@ -497,6 +497,20 @@ class Pickler:
except AttributeError:
module = whichmodule(object, name)
try:
__import__(module)
mod = sys.modules[module]
klass = getattr(mod, name)
except (ImportError, KeyError, AttributeError):
raise PicklingError(
"Can't pickle %r: it's not found as %s.%s" %
(object, module, name))
else:
if klass is not object:
raise PicklingError(
"Can't pickle %r: it's not the same object as %s.%s" %
(object, module, name))
memo_len = len(memo)
write(GLOBAL + module + '\n' + name + '\n' +
self.put(memo_len))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment