mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-10-31 07:57:55 +03:00 
			
		
		
		
	FloatField will crash if the input is a number that is too big (#8725)
* FloatField will crash if the input is a number that is too big * Added Unit test for float field overflow error catch * Removed random import * Removed additional imported ValidationError * Update rest_framework/fields.py * Update tests/test_fields.py Co-authored-by: Asif Saif Uddin <auvipy@gmail.com>
This commit is contained in:
		
							parent
							
								
									dc300aa4e0
								
							
						
					
					
						commit
						9e56f54efb
					
				|  | @ -919,7 +919,8 @@ class FloatField(Field): | |||
|         'invalid': _('A valid number is required.'), | ||||
|         'max_value': _('Ensure this value is less than or equal to {max_value}.'), | ||||
|         'min_value': _('Ensure this value is greater than or equal to {min_value}.'), | ||||
|         'max_string_length': _('String value too large.') | ||||
|         'max_string_length': _('String value too large.'), | ||||
|         'overflow': _('Integer value too large to convert to float') | ||||
|     } | ||||
|     MAX_STRING_LENGTH = 1000  # Guard against malicious string inputs. | ||||
| 
 | ||||
|  | @ -945,6 +946,8 @@ class FloatField(Field): | |||
|             return float(data) | ||||
|         except (TypeError, ValueError): | ||||
|             self.fail('invalid') | ||||
|         except OverflowError: | ||||
|             self.fail('overflow') | ||||
| 
 | ||||
|     def to_representation(self, value): | ||||
|         return float(value) | ||||
|  |  | |||
|  | @ -1,4 +1,5 @@ | |||
| import datetime | ||||
| import math | ||||
| import os | ||||
| import re | ||||
| import uuid | ||||
|  | @ -1072,6 +1073,14 @@ class TestMinMaxFloatField(FieldValues): | |||
|     field = serializers.FloatField(min_value=1, max_value=3) | ||||
| 
 | ||||
| 
 | ||||
| class TestFloatFieldOverFlowError(TestCase): | ||||
|     def test_overflow_error_float_field(self): | ||||
|         field = serializers.FloatField() | ||||
|         with pytest.raises(serializers.ValidationError) as exec_info: | ||||
|             field.to_internal_value(data=math.factorial(171)) | ||||
|         assert "Integer value too large to convert to float" in str(exec_info.value.detail) | ||||
| 
 | ||||
| 
 | ||||
| class TestDecimalField(FieldValues): | ||||
|     """ | ||||
|     Valid and invalid values for `DecimalField`. | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user