summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2024-08-08 08:13:29 +0200
committerSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2024-08-08 09:55:21 +0200
commitd9aeb23edb6cc861360ffbb59a45beccafe55dcb (patch)
treecee740a1a360059c52546306c0ee7743d625a08a
parent52a0a0893e903bc88a4238e21a9338f0e2f4aa2d (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.py12
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):