From 3fde3154fc5263656c31a852328e91586ebb3c39 Mon Sep 17 00:00:00 2001 From: RavSinghChandan Date: Fri, 30 Oct 2026 22:21:41 +0530 Subject: [PATCH] Return None instead of crashing on an invalid alpha in color5 --- tests/test_tinycss2.py | 9 +++++++++ tinycss2/color5.py | 6 ++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/tests/test_tinycss2.py b/tests/test_tinycss2.py index 98fbf7c..1e081d8 100644 --- a/tests/test_tinycss2.py +++ b/tests/test_tinycss2.py @@ -218,6 +218,15 @@ def test_color_currentcolor_5(): assert parse_color5(value) == 'currentcolor' +@pytest.mark.parametrize('input', [ + 'device-cmyk(0 0 0 0 / foo)', + 'device-cmyk(0 0 0 0 / 1 2)', + 'color(--custom 1 0 0 / foo)', +]) +def test_color_invalid_alpha_5(input): + assert parse_color5(input) is None + + @json_test() def test_color_function_4(input): return _build_color(parse_color4(input)) diff --git a/tinycss2/color5.py b/tinycss2/color5.py index b9d0066..3354453 100644 --- a/tinycss2/color5.py +++ b/tinycss2/color5.py @@ -70,10 +70,12 @@ def parse_color(input, color_schemes=None): tokens = tokens[:index] break + if (alpha := color4._parse_alpha(alpha)) is None: + return if name == 'device-cmyk': - return _parse_device_cmyk(tokens, color4._parse_alpha(alpha), old_syntax) + return _parse_device_cmyk(tokens, alpha, old_syntax) elif name == 'color': - return _parse_color(space, tokens, color4._parse_alpha(alpha)) + return _parse_color(space, tokens, alpha) elif name == 'light-dark': return _parse_light_dark(tokens, color_scheme) else: