From 244ac0ed6baeb3d1789be61e1a0f8ef962e716f4 Mon Sep 17 00:00:00 2001 From: yananix Date: Sun, 6 Sep 2026 20:48:11 +0800 Subject: [PATCH] Fix intcomma overflow for large Python integers --- src/humanize/number.py | 2 +- tests/test_number.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/humanize/number.py b/src/humanize/number.py index 727435f2..2dfeffe4 100644 --- a/src/humanize/number.py +++ b/src/humanize/number.py @@ -160,7 +160,7 @@ def intcomma(value: NumberOrString, ndigits: int | None = None) -> str: value = float(value) else: value = int(value) - else: + elif not isinstance(value, int): if not math.isfinite(float(value)): return _format_not_finite(float(value)) float(value) diff --git a/tests/test_number.py b/tests/test_number.py index cf55ee1d..6f0a664a 100644 --- a/tests/test_number.py +++ b/tests/test_number.py @@ -83,6 +83,13 @@ def test_intcomma( assert humanize.intcomma(*test_args) == expected +@pytest.mark.parametrize("sign", [1, -1]) +def test_intcomma_large_integer(sign: int) -> None: + value = sign * (10**400 + 123) + expected = ("-" if sign < 0 else "") + "10" + ",000" * 132 + ",123" + assert humanize.intcomma(value) == expected + + def test_intword_powers() -> None: # make sure that powers & human_powers have the same number of items assert len(number.powers) == len(number.human_powers)