summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>2009-07-23 22:31:47 (GMT)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>2009-07-23 22:31:47 (GMT)
commit47ccf0cbbaa4797d9d32c51c70d51a711a8d5fe0 (patch)
treee68f31fc90c12bbc7707f41f103c1fc4125c9d65
parentce28a01e350bee803bbddab873090e59fb9d0c4c (diff)
downloadcpython-47ccf0cbbaa4797d9d32c51c70d51a711a8d5fe0.zip
cpython-47ccf0cbbaa4797d9d32c51c70d51a711a8d5fe0.tar.gz
cpython-47ccf0cbbaa4797d9d32c51c70d51a711a8d5fe0.tar.bz2
Merged revisions 74189 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r74189 | amaury.forgeotdarc | 2009-07-23 21:26:02 +0200 (jeu., 23 juil. 2009) | 4 lines #6553: crash in cPickle.load(), when given a StringIO with incomplete data. Will backport to 2.6, 3.x already fixed a similar issue with issue4298. ........
-rw-r--r--Lib/test/pickletester.py5
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/cPickle.c6
3 files changed, 14 insertions, 0 deletions
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index f7099a1..73ca926 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -1,6 +1,7 @@
import unittest
import pickle
import cPickle
+import StringIO
import pickletools
import copy_reg
@@ -1015,6 +1016,10 @@ class AbstractPickleModuleTests(unittest.TestCase):
self.module.Pickler(f, -1)
self.module.Pickler(f, protocol=-1)
+ def test_incomplete_input(self):
+ s = StringIO.StringIO("X''.")
+ self.assertRaises(EOFError, self.module.load, s)
+
class AbstractPersistentPicklerTests(unittest.TestCase):
# This class defines persistent_id() and persistent_load()
diff --git a/Misc/NEWS b/Misc/NEWS
index df3c2a5..3374e13 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -273,6 +273,9 @@ Core and Builtins
Library
-------
+- Issue #6553: Fixed a crash in cPickle.load(), when given a file-like object
+ containing incomplete data.
+
- Issue #2622: Fixed an ImportError when importing email.messsage from a
standalone application built with py2exe or py2app.
diff --git a/Modules/cPickle.c b/Modules/cPickle.c
index 1cef5c1..8fa4a66 100644
--- a/Modules/cPickle.c
+++ b/Modules/cPickle.c
@@ -663,6 +663,12 @@ read_other(Unpicklerobject *self, char **s, Py_ssize_t n)
self->last_string = str;
if (! (*s = PyString_AsString(str))) return -1;
+
+ if (PyString_GET_SIZE(str) != n) {
+ PyErr_SetNone(PyExc_EOFError);
+ return -1;
+ }
+
return n;
}