mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	Issue #19969: PyBytes_FromFormatV() now raises an OverflowError if "%c"
argument is not in range [0; 255].
This commit is contained in:
		
							parent
							
								
									3ad2d70947
								
							
						
					
					
						commit
						c9362cf86a
					
				
					 3 changed files with 25 additions and 3 deletions
				
			
		|  | @ -729,6 +729,12 @@ def test_from_format(self): | ||||||
|         self.assertEqual(PyBytes_FromFormat(b's:%s', c_char_p(b'cstr')), |         self.assertEqual(PyBytes_FromFormat(b's:%s', c_char_p(b'cstr')), | ||||||
|                          b's:cstr') |                          b's:cstr') | ||||||
| 
 | 
 | ||||||
|  |         # Issue #19969 | ||||||
|  |         self.assertRaises(OverflowError, | ||||||
|  |                           PyBytes_FromFormat, b'%c', c_int(-1)) | ||||||
|  |         self.assertRaises(OverflowError, | ||||||
|  |                           PyBytes_FromFormat, b'%c', c_int(256)) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| class ByteArrayTest(BaseBytesTest, unittest.TestCase): | class ByteArrayTest(BaseBytesTest, unittest.TestCase): | ||||||
|     type2test = bytearray |     type2test = bytearray | ||||||
|  |  | ||||||
|  | @ -10,6 +10,9 @@ What's New in Python 3.3.4 release candidate 1? | ||||||
| Core and Builtins | Core and Builtins | ||||||
| ----------------- | ----------------- | ||||||
| 
 | 
 | ||||||
|  | - Issue #19969: PyBytes_FromFormatV() now raises an OverflowError if "%c" | ||||||
|  |   argument is not in range [0; 255]. | ||||||
|  | 
 | ||||||
| - Issue #14432: Generator now clears the borrowed reference to the thread | - Issue #14432: Generator now clears the borrowed reference to the thread | ||||||
|   state. Fix a crash when a generator is created in a C thread that is |   state. Fix a crash when a generator is created in a C thread that is | ||||||
|   destroyed while the generator is still used. The issue was that a generator |   destroyed while the generator is still used. The issue was that a generator | ||||||
|  |  | ||||||
|  | @ -186,8 +186,17 @@ PyBytes_FromFormatV(const char *format, va_list vargs) | ||||||
| 
 | 
 | ||||||
|             switch (*f) { |             switch (*f) { | ||||||
|             case 'c': |             case 'c': | ||||||
|                 (void)va_arg(count, int); |             { | ||||||
|                 /* fall through... */ |                 int c = va_arg(count, int); | ||||||
|  |                 if (c < 0 || c > 255) { | ||||||
|  |                     PyErr_SetString(PyExc_OverflowError, | ||||||
|  |                                     "PyBytes_FromFormatV(): %c format " | ||||||
|  |                                     "expects an integer in range [0; 255]"); | ||||||
|  |                     return NULL; | ||||||
|  |                 } | ||||||
|  |                 n++; | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|             case '%': |             case '%': | ||||||
|                 n++; |                 n++; | ||||||
|                 break; |                 break; | ||||||
|  | @ -267,8 +276,12 @@ PyBytes_FromFormatV(const char *format, va_list vargs) | ||||||
| 
 | 
 | ||||||
|             switch (*f) { |             switch (*f) { | ||||||
|             case 'c': |             case 'c': | ||||||
|                 *s++ = va_arg(vargs, int); |             { | ||||||
|  |                 int c = va_arg(vargs, int); | ||||||
|  |                 /* c has been checked for overflow in the first step */ | ||||||
|  |                 *s++ = (unsigned char)c; | ||||||
|                 break; |                 break; | ||||||
|  |             } | ||||||
|             case 'd': |             case 'd': | ||||||
|                 if (longflag) |                 if (longflag) | ||||||
|                     sprintf(s, "%ld", va_arg(vargs, long)); |                     sprintf(s, "%ld", va_arg(vargs, long)); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Victor Stinner
						Victor Stinner