summaryrefslogtreecommitdiffstats
path: root/Lib/pickle.py
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2003-02-02 20:29:39 (GMT)
committerTim Peters <tim.peters@gmail.com>2003-02-02 20:29:39 (GMT)
commit1d63c9f15134a2776b39fb979c506637f73c8a51 (patch)
tree3e982922147a9e1ce2c8ae974f0ef61d6956397f /Lib/pickle.py
parent9af6968b9066f1be419d09d68af0d0659a7ba991 (diff)
downloadcpython-1d63c9f15134a2776b39fb979c506637f73c8a51.zip
cpython-1d63c9f15134a2776b39fb979c506637f73c8a51.tar.gz
cpython-1d63c9f15134a2776b39fb979c506637f73c8a51.tar.bz2
cPickle support for TUPLE[123]. Incidentally plugged several undetected
overflow holes in Pdata_grow().
Diffstat (limited to 'Lib/pickle.py')
-rw-r--r--Lib/pickle.py16
1 files changed, 9 insertions, 7 deletions
diff --git a/Lib/pickle.py b/Lib/pickle.py
index 4e80cca..926869e 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -621,8 +621,11 @@ class Pickler:
proto = self.proto
n = len(obj)
- if n == 0 and proto:
- write(EMPTY_TUPLE)
+ if n == 0:
+ if proto:
+ write(EMPTY_TUPLE)
+ else:
+ write(MARK + TUPLE)
return
save = self.save
@@ -639,13 +642,13 @@ class Pickler:
self.memoize(obj)
return
- # proto 0, or proto 1 and tuple isn't empty, or proto > 1 and tuple
+ # proto 0 or proto 1 and tuple isn't empty, or proto > 1 and tuple
# has more than 3 elements.
write(MARK)
for element in obj:
save(element)
- if n and id(obj) in memo:
+ if id(obj) in memo:
# Subtle. d was not in memo when we entered save_tuple(), so
# the process of saving the tuple's elements must have saved
# the tuple itself: the tuple is recursive. The proper action
@@ -660,10 +663,9 @@ class Pickler:
write(POP * (n+1) + get)
return
- # No recursion (including the empty-tuple case for protocol 0).
+ # No recursion.
self.write(TUPLE)
- if obj: # No need to memoize empty tuple
- self.memoize(obj)
+ self.memoize(obj)
dispatch[TupleType] = save_tuple