Index: Lib/test/pickletester.py =================================================================== --- Lib/test/pickletester.py (revision 67148) +++ Lib/test/pickletester.py (working copy) @@ -1032,7 +1032,12 @@ self.assertRaises(pickle.PicklingError, BadPickler().dump, 0) self.assertRaises(pickle.UnpicklingError, BadUnpickler().load) + def test_bad_input(self): + # Test issue4298 + s = bytes([0x58, 0, 0, 0, 0x54]) + self.assertRaises(EOFError, pickle.loads, s) + class AbstractPersistentPicklerTests(unittest.TestCase): # This class defines persistent_id() and persistent_load() Index: Modules/_pickle.c =================================================================== --- Modules/_pickle.c (revision 67148) +++ Modules/_pickle.c (working copy) @@ -489,6 +489,11 @@ return -1; } + if (PyBytes_GET_SIZE(data) != n) { + PyErr_SetNone(PyExc_EOFError); + return -1; + } + Py_XDECREF(self->last_string); self->last_string = data;