From 9aee257861539b2b01ddae936cadfa1a3e6d282a Mon Sep 17 00:00:00 2001 From: reeko234 Date: Fri, 21 Oct 2022 08:41:01 +0000 Subject: [PATCH 1/6] FloatField will crash if the input is a number that is too big --- rest_framework/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 7f4c83b5df..d132fb5fc1 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -943,7 +943,7 @@ def to_internal_value(self, data): try: return float(data) - except (TypeError, ValueError): + except (TypeError, ValueError, OverflowError): self.fail('invalid') def to_representation(self, value): From cc25b099d3cb16429342c09776fafbfc78c32180 Mon Sep 17 00:00:00 2001 From: reeko234 Date: Sat, 22 Oct 2022 21:33:35 +0000 Subject: [PATCH 2/6] Added Unit test for float field overflow error catch --- rest_framework/fields.py | 7 +++++-- tests/test_fields.py | 11 +++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index d132fb5fc1..95093a257d 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -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': _('int too large to convert to float') } MAX_STRING_LENGTH = 1000 # Guard against malicious string inputs. @@ -943,8 +944,10 @@ def to_internal_value(self, data): try: return float(data) - except (TypeError, ValueError, OverflowError): + except (TypeError, ValueError): self.fail('invalid') + except OverflowError: + self.fail('overflow') def to_representation(self, value): return float(value) diff --git a/tests/test_fields.py b/tests/test_fields.py index 11e293107d..9034572c76 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -1,5 +1,7 @@ import datetime +import math import os +import random import re import uuid from decimal import ROUND_DOWN, ROUND_UP, Decimal @@ -13,6 +15,7 @@ import rest_framework from rest_framework import exceptions, serializers +from rest_framework.exceptions import ValidationError from rest_framework.fields import ( BuiltinSignatureError, DjangoImageField, is_simple_callable ) @@ -1072,6 +1075,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 "int too large to convert to float" in str(exec_info.value.detail) + + class TestDecimalField(FieldValues): """ Valid and invalid values for `DecimalField`. From ae5c8e7e02063d790cb66f3e171b8ddcf3a4d709 Mon Sep 17 00:00:00 2001 From: reeko234 Date: Sat, 22 Oct 2022 21:47:46 +0000 Subject: [PATCH 3/6] Removed random import --- tests/test_fields.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_fields.py b/tests/test_fields.py index 9034572c76..792870dfb3 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -1,7 +1,6 @@ import datetime import math import os -import random import re import uuid from decimal import ROUND_DOWN, ROUND_UP, Decimal From b487f57738f064f90ace4e7198960ca87740d0f3 Mon Sep 17 00:00:00 2001 From: reeko234 Date: Mon, 24 Oct 2022 23:21:31 +0000 Subject: [PATCH 4/6] Removed additional imported ValidationError --- tests/test_fields.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_fields.py b/tests/test_fields.py index 792870dfb3..e5096cbe93 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -14,7 +14,6 @@ import rest_framework from rest_framework import exceptions, serializers -from rest_framework.exceptions import ValidationError from rest_framework.fields import ( BuiltinSignatureError, DjangoImageField, is_simple_callable ) From 00cf78362d49bea7a0015d82584d68f59bdb5166 Mon Sep 17 00:00:00 2001 From: Asif Saif Uddin Date: Tue, 22 Nov 2022 10:26:05 +0600 Subject: [PATCH 5/6] Update rest_framework/fields.py --- rest_framework/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 95093a257d..0a37eb0931 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -920,7 +920,7 @@ class FloatField(Field): '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.'), - 'overflow': _('int too large to convert to float') + 'overflow': _('Integer value too large to convert to float') } MAX_STRING_LENGTH = 1000 # Guard against malicious string inputs. From 10553a0b3dd243681b6e350d870886fa006e3887 Mon Sep 17 00:00:00 2001 From: Asif Saif Uddin Date: Tue, 22 Nov 2022 10:45:56 +0600 Subject: [PATCH 6/6] Update tests/test_fields.py --- tests/test_fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_fields.py b/tests/test_fields.py index e5096cbe93..12a9ac7c7c 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -1078,7 +1078,7 @@ 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 "int too large to convert to float" in str(exec_info.value.detail) + assert "Integer value too large to convert to float" in str(exec_info.value.detail) class TestDecimalField(FieldValues): pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy