[Python-checkins] r70203 - in python/branches/py3k: Lib/test/test_array.py Misc/NEWS Modules/arraymodule.c

hirokazu.yamamoto python-checkins at python.org
Fri Mar 6 04:04:07 CET 2009


Author: hirokazu.yamamoto
Date: Fri Mar  6 04:04:07 2009
New Revision: 70203

Log:
Issue #5334: array.fromfile() failed to insert values when EOFError was raised.
Reviewed by Benjamin Peterson.

Modified:
   python/branches/py3k/Lib/test/test_array.py
   python/branches/py3k/Misc/NEWS
   python/branches/py3k/Modules/arraymodule.c

Modified: python/branches/py3k/Lib/test/test_array.py
==============================================================================
--- python/branches/py3k/Lib/test/test_array.py	(original)
+++ python/branches/py3k/Lib/test/test_array.py	Fri Mar  6 04:04:07 2009
@@ -174,9 +174,8 @@
             b.fromfile(f, len(self.example))
             self.assertEqual(b, array.array(self.typecode, self.example))
             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.assertRaises(EOFError, b.fromfile, f, 1)
             f.close()
         finally:
             if not f.closed:

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Fri Mar  6 04:04:07 2009
@@ -183,6 +183,8 @@
 Library
 -------
 
+- Issue #5334: array.fromfile() failed to insert values when EOFError was raised.
+
 - Issue #5385: Fixed mmap crash after resize failure on windows.
 
 - Issue #5179: Fixed subprocess handle leak on failure on windows.

Modified: python/branches/py3k/Modules/arraymodule.c
==============================================================================
--- python/branches/py3k/Modules/arraymodule.c	(original)
+++ python/branches/py3k/Modules/arraymodule.c	Fri Mar  6 04:04:07 2009
@@ -1201,6 +1201,7 @@
 	PyObject *f, *b, *res;
 	Py_ssize_t itemsize = self->ob_descr->itemsize;
 	Py_ssize_t n, nbytes;
+	int not_enough_bytes;
 
         if (!PyArg_ParseTuple(args, "On:fromfile", &f, &n))
 		return NULL;
@@ -1222,12 +1223,7 @@
 		return NULL;
 	}
 
-	if (PyBytes_GET_SIZE(b) != nbytes) {
-		PyErr_SetString(PyExc_EOFError,
-				"read() didn't return enough bytes");
-		Py_DECREF(b);
-		return NULL;
-	}
+	not_enough_bytes = (PyBytes_GET_SIZE(b) != nbytes);
 
 	args = Py_BuildValue("(O)", b);
 	Py_DECREF(b);
@@ -1236,6 +1232,15 @@
 
 	res = array_fromstring(self, 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;
 }


More information about the Python-checkins mailing list