mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #29007 -- Fixed DecimalValidator crash on NaN, SNan, Inf, and Infinity values.
This commit is contained in:
		
				
					committed by
					
						 Tim Graham
						Tim Graham
					
				
			
			
				
	
			
			
			
						parent
						
							c886f3dee3
						
					
				
				
					commit
					f636f0bb86
				
			| @@ -391,6 +391,7 @@ class DecimalValidator: | ||||
|     expected, otherwise raise ValidationError. | ||||
|     """ | ||||
|     messages = { | ||||
|         'invalid': _('Enter a number.'), | ||||
|         'max_digits': ngettext_lazy( | ||||
|             'Ensure that there are no more than %(max)s digit in total.', | ||||
|             'Ensure that there are no more than %(max)s digits in total.', | ||||
| @@ -414,6 +415,8 @@ class DecimalValidator: | ||||
|  | ||||
|     def __call__(self, value): | ||||
|         digit_tuple, exponent = value.as_tuple()[1:] | ||||
|         if exponent in {'F', 'n', 'N'}: | ||||
|             raise ValidationError(self.messages['invalid']) | ||||
|         if exponent >= 0: | ||||
|             # A positive exponent adds that many trailing zeros. | ||||
|             digits = len(digit_tuple) + exponent | ||||
|   | ||||
| @@ -271,6 +271,14 @@ TEST_DATA = [ | ||||
|     (DecimalValidator(max_digits=5, decimal_places=2), Decimal('7304E-3'), ValidationError), | ||||
|     (DecimalValidator(max_digits=5, decimal_places=5), Decimal('70E-5'), None), | ||||
|     (DecimalValidator(max_digits=5, decimal_places=5), Decimal('70E-6'), ValidationError), | ||||
|     # 'Enter a number.' errors | ||||
|     *[ | ||||
|         (DecimalValidator(decimal_places=2, max_digits=10), Decimal(value), ValidationError) | ||||
|         for value in ( | ||||
|             'NaN', '-NaN', '+NaN', 'sNaN', '-sNaN', '+sNaN', | ||||
|             'Inf', '-Inf', '+Inf', 'Infinity', '-Infinity', '-Infinity', | ||||
|         ) | ||||
|     ], | ||||
|  | ||||
|     (validate_image_file_extension, ContentFile('contents', name='file.jpg'), None), | ||||
|     (validate_image_file_extension, ContentFile('contents', name='file.png'), None), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user