[Python-checkins] r54663 - in python/trunk: Lib/test/test_re.py Modules/arraymodule.c

raymond.hettinger python-checkins at python.org
Tue Apr 3 00:54:22 CEST 2007


Author: raymond.hettinger
Date: Tue Apr  3 00:54:21 2007
New Revision: 54663

Modified:
   python/trunk/Lib/test/test_re.py
   python/trunk/Modules/arraymodule.c
Log:
Array module's buffer interface can now handle empty arrays.



Modified: python/trunk/Lib/test/test_re.py
==============================================================================
--- python/trunk/Lib/test/test_re.py	(original)
+++ python/trunk/Lib/test/test_re.py	Tue Apr  3 00:54:21 2007
@@ -601,6 +601,13 @@
         self.assertEqual(iter.next().span(), (4, 4))
         self.assertRaises(StopIteration, iter.next)
 
+    def test_empty_array(self):
+        # SF buf 1647541
+        import array
+        for typecode in 'cbBuhHiIlLfd':
+            a = array.array(typecode)
+            self.assertEqual(re.compile("bla").match(a), None)
+            self.assertEqual(re.compile("").match(a).groups(), ())            
 
 def run_re_tests():
     from test.re_tests import benchmarks, tests, SUCCEED, FAIL, SYNTAX_ERROR

Modified: python/trunk/Modules/arraymodule.c
==============================================================================
--- python/trunk/Modules/arraymodule.c	(original)
+++ python/trunk/Modules/arraymodule.c	Tue Apr  3 00:54:21 2007
@@ -1745,6 +1745,8 @@
 	(objobjargproc)array_ass_subscr
 };
 
+static const void *emptybuf = "";
+
 static Py_ssize_t
 array_buffer_getreadbuf(arrayobject *self, Py_ssize_t index, const void **ptr)
 {
@@ -1754,6 +1756,8 @@
 		return -1;
 	}
 	*ptr = (void *)self->ob_item;
+	if (*ptr == NULL)
+		*ptr = emptybuf;
 	return self->ob_size*self->ob_descr->itemsize;
 }
 
@@ -1766,6 +1770,8 @@
 		return -1;
 	}
 	*ptr = (void *)self->ob_item;
+	if (*ptr == NULL)
+		*ptr = emptybuf;
 	return self->ob_size*self->ob_descr->itemsize;
 }
 


More information about the Python-checkins mailing list