mirror of
https://github.com/python/cpython.git
synced 2025-10-18 04:38:07 +00:00
Issue #5334: array.fromfile() failed to insert values when EOFError was raised.
Reviewed by Benjamin Peterson.
This commit is contained in:
parent
3aed8d5110
commit
54d0df69c0
3 changed files with 14 additions and 8 deletions
|
@ -174,9 +174,8 @@ class BaseTest(unittest.TestCase):
|
||||||
b.fromfile(f, len(self.example))
|
b.fromfile(f, len(self.example))
|
||||||
self.assertEqual(b, array.array(self.typecode, self.example))
|
self.assertEqual(b, array.array(self.typecode, self.example))
|
||||||
self.assertNotEqual(a, b)
|
self.assertNotEqual(a, b)
|
||||||
b.fromfile(f, len(self.example))
|
self.assertRaises(EOFError, b.fromfile, f, len(self.example)+1)
|
||||||
self.assertEqual(a, b)
|
self.assertEqual(a, b)
|
||||||
self.assertRaises(EOFError, b.fromfile, f, 1)
|
|
||||||
f.close()
|
f.close()
|
||||||
finally:
|
finally:
|
||||||
if not f.closed:
|
if not f.closed:
|
||||||
|
|
|
@ -183,6 +183,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #5334: array.fromfile() failed to insert values when EOFError was raised.
|
||||||
|
|
||||||
- Issue #5385: Fixed mmap crash after resize failure on windows.
|
- Issue #5385: Fixed mmap crash after resize failure on windows.
|
||||||
|
|
||||||
- Issue #5179: Fixed subprocess handle leak on failure on windows.
|
- Issue #5179: Fixed subprocess handle leak on failure on windows.
|
||||||
|
|
|
@ -1201,6 +1201,7 @@ array_fromfile(arrayobject *self, PyObject *args)
|
||||||
PyObject *f, *b, *res;
|
PyObject *f, *b, *res;
|
||||||
Py_ssize_t itemsize = self->ob_descr->itemsize;
|
Py_ssize_t itemsize = self->ob_descr->itemsize;
|
||||||
Py_ssize_t n, nbytes;
|
Py_ssize_t n, nbytes;
|
||||||
|
int not_enough_bytes;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "On:fromfile", &f, &n))
|
if (!PyArg_ParseTuple(args, "On:fromfile", &f, &n))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1222,12 +1223,7 @@ array_fromfile(arrayobject *self, PyObject *args)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PyBytes_GET_SIZE(b) != nbytes) {
|
not_enough_bytes = (PyBytes_GET_SIZE(b) != nbytes);
|
||||||
PyErr_SetString(PyExc_EOFError,
|
|
||||||
"read() didn't return enough bytes");
|
|
||||||
Py_DECREF(b);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
args = Py_BuildValue("(O)", b);
|
args = Py_BuildValue("(O)", b);
|
||||||
Py_DECREF(b);
|
Py_DECREF(b);
|
||||||
|
@ -1236,6 +1232,15 @@ array_fromfile(arrayobject *self, PyObject *args)
|
||||||
|
|
||||||
res = array_fromstring(self, args);
|
res = array_fromstring(self, args);
|
||||||
Py_DECREF(args);
|
Py_DECREF(args);
|
||||||
|
if (res == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (not_enough_bytes) {
|
||||||
|
PyErr_SetString(PyExc_EOFError,
|
||||||
|
"read() didn't return enough bytes");
|
||||||
|
Py_DECREF(res);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue