mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	[3.14] gh-134119: Fix crash from calling next() on exhausted template iterator (GH-134120) (#134153)
gh-134119: Fix crash from calling next() on exhausted template iterator (GH-134120)
(cherry picked from commit fc7f4c3666)
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
			
			
This commit is contained in:
		
							parent
							
								
									cca18fcbe8
								
							
						
					
					
						commit
						1ba5e65b76
					
				
					 3 changed files with 12 additions and 0 deletions
				
			
		|  | @ -148,6 +148,13 @@ def test_iter(self): | ||||||
|         self.assertEqual(res[1].format_spec, '') |         self.assertEqual(res[1].format_spec, '') | ||||||
|         self.assertEqual(res[2], ' yz') |         self.assertEqual(res[2], ' yz') | ||||||
| 
 | 
 | ||||||
|  |     def test_exhausted(self): | ||||||
|  |         # See https://github.com/python/cpython/issues/134119. | ||||||
|  |         template_iter = iter(t"{1}") | ||||||
|  |         self.assertIsInstance(next(template_iter), Interpolation) | ||||||
|  |         self.assertRaises(StopIteration, next, template_iter) | ||||||
|  |         self.assertRaises(StopIteration, next, template_iter) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     unittest.main() |     unittest.main() | ||||||
|  |  | ||||||
|  | @ -0,0 +1,2 @@ | ||||||
|  | Fix crash when calling :func:`next` on an exhausted template string iterator. | ||||||
|  | Patch by Jelle Zijlstra. | ||||||
|  | @ -23,6 +23,9 @@ templateiter_next(PyObject *op) | ||||||
|     if (self->from_strings) { |     if (self->from_strings) { | ||||||
|         item = PyIter_Next(self->stringsiter); |         item = PyIter_Next(self->stringsiter); | ||||||
|         self->from_strings = 0; |         self->from_strings = 0; | ||||||
|  |         if (item == NULL) { | ||||||
|  |             return NULL; | ||||||
|  |         } | ||||||
|         if (PyUnicode_GET_LENGTH(item) == 0) { |         if (PyUnicode_GET_LENGTH(item) == 0) { | ||||||
|             Py_SETREF(item, PyIter_Next(self->interpolationsiter)); |             Py_SETREF(item, PyIter_Next(self->interpolationsiter)); | ||||||
|             self->from_strings = 1; |             self->from_strings = 1; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Miss Islington (bot)
						Miss Islington (bot)