Fixed #29006 -- Fixed DecimalField.clean() crash on sNaN values.

This commit is contained in:
Fabio Bonelli 2018-01-10 19:06:47 -05:00 committed by Tim Graham
parent 1c95737ebe
commit c886f3dee3
2 changed files with 2 additions and 1 deletions

View File

@ -351,7 +351,7 @@ class DecimalField(IntegerField):
super().validate(value) super().validate(value)
if value in self.empty_values: if value in self.empty_values:
return return
if not math.isfinite(value): if value.is_nan() or not math.isfinite(value):
raise ValidationError(self.error_messages['invalid'], code='invalid') raise ValidationError(self.error_messages['invalid'], code='invalid')
def widget_attrs(self, widget): def widget_attrs(self, widget):

View File

@ -51,6 +51,7 @@ class DecimalFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
f = DecimalField(max_digits=4, decimal_places=2) f = DecimalField(max_digits=4, decimal_places=2)
values = ( values = (
'-NaN', 'NaN', '+NaN', '-NaN', 'NaN', '+NaN',
'-sNaN', 'sNaN', '+sNaN',
'-Inf', 'Inf', '+Inf', '-Inf', 'Inf', '+Inf',
'-Infinity', 'Infinity', '+Infinity', '-Infinity', 'Infinity', '+Infinity',
'a', 'łąść', '1.0a', '--0.12', 'a', 'łąść', '1.0a', '--0.12',