Kaydet (Commit) 47ccf0cb authored tarafından Amaury Forgeot d'Arc's avatar Amaury Forgeot d'Arc

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.
........
üst ce28a01e
import unittest import unittest
import pickle import pickle
import cPickle import cPickle
import StringIO
import pickletools import pickletools
import copy_reg import copy_reg
...@@ -1015,6 +1016,10 @@ class AbstractPickleModuleTests(unittest.TestCase): ...@@ -1015,6 +1016,10 @@ class AbstractPickleModuleTests(unittest.TestCase):
self.module.Pickler(f, -1) self.module.Pickler(f, -1)
self.module.Pickler(f, protocol=-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): class AbstractPersistentPicklerTests(unittest.TestCase):
# This class defines persistent_id() and persistent_load() # This class defines persistent_id() and persistent_load()
......
...@@ -273,6 +273,9 @@ Core and Builtins ...@@ -273,6 +273,9 @@ Core and Builtins
Library 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 - Issue #2622: Fixed an ImportError when importing email.messsage from a
standalone application built with py2exe or py2app. standalone application built with py2exe or py2app.
......
...@@ -663,6 +663,12 @@ read_other(Unpicklerobject *self, char **s, Py_ssize_t n) ...@@ -663,6 +663,12 @@ read_other(Unpicklerobject *self, char **s, Py_ssize_t n)
self->last_string = str; self->last_string = str;
if (! (*s = PyString_AsString(str))) return -1; if (! (*s = PyString_AsString(str))) return -1;
if (PyString_GET_SIZE(str) != n) {
PyErr_SetNone(PyExc_EOFError);
return -1;
}
return n; return n;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment