diff options
Diffstat (limited to 'Lib/pickle.py')
-rw-r--r-- | Lib/pickle.py | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/Lib/pickle.py b/Lib/pickle.py index b8e114a..ade0491 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -1086,11 +1086,16 @@ class _Pickler: module_name = whichmodule(obj, name) if self.proto >= 2: - code = _extension_registry.get((module_name, name)) - if code: - assert code > 0 + code = _extension_registry.get((module_name, name), _NoValue) + if code is not _NoValue: if code <= 0xff: - write(EXT1 + pack("<B", code)) + data = pack("<B", code) + if data == b'\0': + # Should never happen in normal circumstances, + # since the type and the value of the code are + # checked in copyreg.add_extension(). + raise RuntimeError("extension code 0 is out of range") + write(EXT1 + data) elif code <= 0xffff: write(EXT2 + pack("<H", code)) else: @@ -1581,9 +1586,8 @@ class _Unpickler: dispatch[EXT4[0]] = load_ext4 def get_extension(self, code): - nil = [] - obj = _extension_cache.get(code, nil) - if obj is not nil: + obj = _extension_cache.get(code, _NoValue) + if obj is not _NoValue: self.append(obj) return key = _inverted_registry.get(code) |