diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-07-17 08:24:17 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-07-17 08:24:17 (GMT) |
commit | dec25afab1c325c28621dda3ba2b32dbc200c8b3 (patch) | |
tree | e1b19ba17d8dab7f94aa6f0053264030b954dc32 /Lib/pickle.py | |
parent | 6fd76bceda3fefc5e5814108c5fe819050613d33 (diff) | |
download | cpython-dec25afab1c325c28621dda3ba2b32dbc200c8b3.zip cpython-dec25afab1c325c28621dda3ba2b32dbc200c8b3.tar.gz cpython-dec25afab1c325c28621dda3ba2b32dbc200c8b3.tar.bz2 |
Issue #17711: Fixed unpickling by the persistent ID with protocol 0.
Original patch by Alexandre Vassalotti.
Diffstat (limited to 'Lib/pickle.py')
-rw-r--r-- | Lib/pickle.py | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/Lib/pickle.py b/Lib/pickle.py index 7760425..040ecb2 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -529,7 +529,11 @@ class _Pickler: self.save(pid, save_persistent_id=False) self.write(BINPERSID) else: - self.write(PERSID + str(pid).encode("ascii") + b'\n') + try: + self.write(PERSID + str(pid).encode("ascii") + b'\n') + except UnicodeEncodeError: + raise PicklingError( + "persistent IDs in protocol 0 must be ASCII strings") def save_reduce(self, func, args, state=None, listitems=None, dictitems=None, obj=None): @@ -1075,7 +1079,11 @@ class _Unpickler: dispatch[FRAME[0]] = load_frame def load_persid(self): - pid = self.readline()[:-1].decode("ascii") + try: + pid = self.readline()[:-1].decode("ascii") + except UnicodeDecodeError: + raise UnpicklingError( + "persistent IDs in protocol 0 must be ASCII strings") self.append(self.persistent_load(pid)) dispatch[PERSID[0]] = load_persid |