summaryrefslogtreecommitdiffstats
path: root/Lib/test/pickletester.py
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2023-12-24 10:01:53 (GMT)
committerGitHub <noreply@github.com>2023-12-24 10:01:53 (GMT)
commit336d44593486288742e4b8009282da1af62d87ba (patch)
tree2eddb86f7d3d29be70222078fe61343dfc44a8f7 /Lib/test/pickletester.py
parentb60bddbde22f74a2289f4838a6c404c53c58e57b (diff)
downloadcpython-336d44593486288742e4b8009282da1af62d87ba.zip
cpython-336d44593486288742e4b8009282da1af62d87ba.tar.gz
cpython-336d44593486288742e4b8009282da1af62d87ba.tar.bz2
[3.11] gh-113028: Correctly memoize str in pickle when escapes added (GH-113436) (GH-113449)
This fixes a divergence between the Python and C implementations of pickle for protocol 0, such that it pickle.py fails to re-use the first pickled representation of strings involving characters that have to be escaped. (cherry picked from commit 08398631a0298dcf785ee7bd0e26c7844823ce59) Co-authored-by: Jeff Allen <ja.py@farowl.co.uk>
Diffstat (limited to 'Lib/test/pickletester.py')
-rw-r--r--Lib/test/pickletester.py8
1 files changed, 8 insertions, 0 deletions
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index 5d5df16..5b9bcec 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -1825,6 +1825,14 @@ class AbstractPickleTests:
t2 = self.loads(p)
self.assert_is_copy(t, t2)
+ def test_unicode_memoization(self):
+ # Repeated str is re-used (even when escapes added).
+ for proto in protocols:
+ for s in '', 'xyz', 'xyz\n', 'x\\yz', 'x\xa1yz\r':
+ p = self.dumps((s, s), proto)
+ s1, s2 = self.loads(p)
+ self.assertIs(s1, s2)
+
def test_bytes(self):
for proto in protocols:
for s in b'', b'xyz', b'xyz'*100: