Fixed #29007 -- Fixed DecimalValidator crash on NaN, SNan, Inf, and Infinity values.
This commit is contained in:
parent
c886f3dee3
commit
f636f0bb86
|
@ -391,6 +391,7 @@ class DecimalValidator:
|
||||||
expected, otherwise raise ValidationError.
|
expected, otherwise raise ValidationError.
|
||||||
"""
|
"""
|
||||||
messages = {
|
messages = {
|
||||||
|
'invalid': _('Enter a number.'),
|
||||||
'max_digits': ngettext_lazy(
|
'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 digit in total.',
|
||||||
'Ensure that there are no more than %(max)s digits in total.',
|
'Ensure that there are no more than %(max)s digits in total.',
|
||||||
|
@ -414,6 +415,8 @@ class DecimalValidator:
|
||||||
|
|
||||||
def __call__(self, value):
|
def __call__(self, value):
|
||||||
digit_tuple, exponent = value.as_tuple()[1:]
|
digit_tuple, exponent = value.as_tuple()[1:]
|
||||||
|
if exponent in {'F', 'n', 'N'}:
|
||||||
|
raise ValidationError(self.messages['invalid'])
|
||||||
if exponent >= 0:
|
if exponent >= 0:
|
||||||
# A positive exponent adds that many trailing zeros.
|
# A positive exponent adds that many trailing zeros.
|
||||||
digits = len(digit_tuple) + exponent
|
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=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-5'), None),
|
||||||
(DecimalValidator(max_digits=5, decimal_places=5), Decimal('70E-6'), ValidationError),
|
(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.jpg'), None),
|
||||||
(validate_image_file_extension, ContentFile('contents', name='file.png'), None),
|
(validate_image_file_extension, ContentFile('contents', name='file.png'), None),
|
||||||
|
|
Loading…
Reference in New Issue