summaryrefslogtreecommitdiffstats
path: root/Modules/_pickle.c
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2013-04-15 19:55:14 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2013-04-15 19:55:14 (GMT)
commitaf94051a933b7fbd9c63b0a45cfba5247d92ac14 (patch)
tree4a1d2acfb1267176d395e7e92c4a7fac6d57b3a8 /Modules/_pickle.c
parentacfc454c10ab2fe5dafd4c90a15eaae8cef214c2 (diff)
parent3034efdd298ad5f94a61f9f0e8ab0fee1d2d212e (diff)
downloadcpython-af94051a933b7fbd9c63b0a45cfba5247d92ac14.zip
cpython-af94051a933b7fbd9c63b0a45cfba5247d92ac14.tar.gz
cpython-af94051a933b7fbd9c63b0a45cfba5247d92ac14.tar.bz2
Issue #17710: Fix pickle raising a SystemError on bogus input.
Diffstat (limited to 'Modules/_pickle.c')
-rw-r--r--Modules/_pickle.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/Modules/_pickle.c b/Modules/_pickle.c
index 146dccc..2c83185 100644
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -4205,7 +4205,7 @@ load_string(UnpicklerObject *self)
if ((len = _Unpickler_Readline(self, &s)) < 0)
return -1;
- if (len < 3)
+ if (len < 2)
return bad_readline();
if ((s = strdup(s)) == NULL) {
PyErr_NoMemory();
@@ -4213,14 +4213,14 @@ load_string(UnpicklerObject *self)
}
/* Strip outermost quotes */
- while (s[len - 1] <= ' ')
+ while (len > 0 && s[len - 1] <= ' ')
len--;
- if (s[0] == '"' && s[len - 1] == '"') {
+ if (len > 1 && s[0] == '"' && s[len - 1] == '"') {
s[len - 1] = '\0';
p = s + 1;
len -= 2;
}
- else if (s[0] == '\'' && s[len - 1] == '\'') {
+ else if (len > 1 && s[0] == '\'' && s[len - 1] == '\'') {
s[len - 1] = '\0';
p = s + 1;
len -= 2;