mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Array module's buffer interface can now handle empty arrays.
This commit is contained in:
		
							parent
							
								
									e6e660bde3
								
							
						
					
					
						commit
						01a807db2a
					
				
					 2 changed files with 13 additions and 0 deletions
				
			
		|  | @ -601,6 +601,13 @@ def test_bug_817234(self): | ||||||
|         self.assertEqual(iter.next().span(), (4, 4)) |         self.assertEqual(iter.next().span(), (4, 4)) | ||||||
|         self.assertRaises(StopIteration, iter.next) |         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(): | def run_re_tests(): | ||||||
|     from test.re_tests import benchmarks, tests, SUCCEED, FAIL, SYNTAX_ERROR |     from test.re_tests import benchmarks, tests, SUCCEED, FAIL, SYNTAX_ERROR | ||||||
|  |  | ||||||
|  | @ -1745,6 +1745,8 @@ static PyMappingMethods array_as_mapping = { | ||||||
| 	(objobjargproc)array_ass_subscr | 	(objobjargproc)array_ass_subscr | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | static const void *emptybuf = ""; | ||||||
|  | 
 | ||||||
| static Py_ssize_t | static Py_ssize_t | ||||||
| array_buffer_getreadbuf(arrayobject *self, Py_ssize_t index, const void **ptr) | array_buffer_getreadbuf(arrayobject *self, Py_ssize_t index, const void **ptr) | ||||||
| { | { | ||||||
|  | @ -1754,6 +1756,8 @@ array_buffer_getreadbuf(arrayobject *self, Py_ssize_t index, const void **ptr) | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
| 	*ptr = (void *)self->ob_item; | 	*ptr = (void *)self->ob_item; | ||||||
|  | 	if (*ptr == NULL) | ||||||
|  | 		*ptr = emptybuf; | ||||||
| 	return self->ob_size*self->ob_descr->itemsize; | 	return self->ob_size*self->ob_descr->itemsize; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -1766,6 +1770,8 @@ array_buffer_getwritebuf(arrayobject *self, Py_ssize_t index, const void **ptr) | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
| 	*ptr = (void *)self->ob_item; | 	*ptr = (void *)self->ob_item; | ||||||
|  | 	if (*ptr == NULL) | ||||||
|  | 		*ptr = emptybuf; | ||||||
| 	return self->ob_size*self->ob_descr->itemsize; | 	return self->ob_size*self->ob_descr->itemsize; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Raymond Hettinger
						Raymond Hettinger