diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2024-08-08 08:13:29 +0200 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2024-08-08 09:55:21 +0200 |
| commit | d9aeb23edb6cc861360ffbb59a45beccafe55dcb (patch) | |
| tree | cee740a1a360059c52546306c0ee7743d625a08a | |
| parent | 52a0a0893e903bc88a4238e21a9338f0e2f4aa2d (diff) | |
[5.1.x] Fixed #35661 -- Fixed test_too_many_digits_to_rander() test crash on PyPy.
Thanks Michał Górny for the report.
Backport of 7fb15ad5bcae05324ee8913e4b2c6c982e8f2de0 from main.
| -rw-r--r-- | tests/template_tests/filter_tests/test_floatformat.py | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/tests/template_tests/filter_tests/test_floatformat.py b/tests/template_tests/filter_tests/test_floatformat.py index 3d6c34a552..6183f6a069 100644 --- a/tests/template_tests/filter_tests/test_floatformat.py +++ b/tests/template_tests/filter_tests/test_floatformat.py @@ -4,6 +4,7 @@ from django.template.defaultfilters import floatformat from django.test import SimpleTestCase from django.utils import translation from django.utils.safestring import mark_safe +from django.utils.version import PYPY from ..utils import setup @@ -181,12 +182,21 @@ class FunctionTests(SimpleTestCase): "-1E10000000000000000", "1e10000000000000000", "-1e10000000000000000", - "1" + "0" * 1_000_000, ] for value in cases: with self.subTest(value=value): self.assertEqual(floatformat(value), value) + def test_too_many_digits_to_render_very_long(self): + value = "1" + "0" * 1_000_000 + if PYPY: + # PyPy casts decimal parts to int, which reaches the integer string + # conversion length limit (default 4300 digits, CVE-2020-10735). + with self.assertRaises(ValueError): + floatformat(value) + else: + self.assertEqual(floatformat(value), value) + def test_float_dunder_method(self): class FloatWrapper: def __init__(self, value): |
