From 8a8ef4917e785ae328d6a58ad5e40e430303ada6 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 15 Nov 2017 14:33:39 +0200 Subject: [PATCH 1/2] bpo-31829: Make protocol 0 pickles be loadable in text mode in Python 2. Escape ``\r``, ``\0`` and ``\x1a`` (end-of-file on Windows) in Unicode strings. --- Lib/pickle.py | 3 +++ Lib/test/pickletester.py | 19 +++++++++++++++---- .../2017-10-21-12-07-56.bpo-31829.6IhP-O.rst | 3 +++ Modules/_pickle.c | 5 ++++- 4 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2017-10-21-12-07-56.bpo-31829.6IhP-O.rst diff --git a/Lib/pickle.py b/Lib/pickle.py index d533e660af3b23..e9ae8cfb3cdbdf 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -745,7 +745,10 @@ def save_str(self, obj): self.write(BINUNICODE + pack("= 256 || ch == '\\' || ch == '\n') { + else if (ch >= 256 || + ch == '\\' || ch == 0 || ch == '\n' || ch == '\r' || + ch == 0x1a) + { /* -1: subtract 1 preallocated byte */ p = _PyBytesWriter_Prepare(&writer, p, 6-1); if (p == NULL) From 7ac084d9afc02e113db7226b18b96f730d677034 Mon Sep 17 00:00:00 2001 From: Zackery Spytz Date: Sat, 6 Apr 2019 12:24:28 +0300 Subject: [PATCH 2/2] Update Modules/_pickle.c Co-Authored-By: serhiy-storchaka --- Modules/_pickle.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/_pickle.c b/Modules/_pickle.c index cd3f3664b0fcc4..85dab14738de03 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -2337,7 +2337,7 @@ raw_unicode_escape(PyObject *obj) } /* Map 16-bit characters, '\\' and '\n' to '\uxxxx' */ else if (ch >= 256 || - ch == '\\' || ch == 0 || ch == '\n' || ch == '\r' || + ch == '\\' || ch == 0 || ch == '\n' || ch == '\r' || ch == 0x1a) { /* -1: subtract 1 preallocated byte */