Skip to content

Commit 3bac017

Browse files
Reject non-finite radius in BoxBlur (#9906)
Co-authored-by: Andrew Murray <radarhere@users.noreply.github.com>
1 parent 473f0c3 commit 3bac017

2 files changed

Lines changed: 21 additions & 2 deletions

File tree

Tests/test_image_filter.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from __future__ import annotations
22

3+
import math
4+
35
import pytest
46

57
from PIL import Image, ImageFilter
@@ -235,6 +237,22 @@ def test_invalid_box_blur_filter(radius: int | tuple[int, int]) -> None:
235237
im.filter(box_blur_filter)
236238

237239

240+
@pytest.mark.parametrize(
241+
"radius",
242+
(
243+
math.nan,
244+
(math.nan, 1),
245+
(1, math.nan),
246+
math.inf,
247+
(1, math.inf),
248+
(math.inf, 1),
249+
),
250+
)
251+
def test_box_blur_non_finite_radius(radius: float | tuple[float, float]) -> None:
252+
with pytest.raises(ValueError, match="radius must be a finite number >= 0"):
253+
ImageFilter.BoxBlur(radius)
254+
255+
238256
def test_rankfilter_size_1() -> None:
239257
im = Image.new("L", (3, 3), 128)
240258

src/PIL/ImageFilter.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from __future__ import annotations
1818

1919
import abc
20+
import math
2021
from typing import cast
2122

2223
TYPE_CHECKING = False
@@ -222,8 +223,8 @@ class BoxBlur(MultibandFilter):
222223

223224
def __init__(self, radius: float | Sequence[float]) -> None:
224225
xy = radius if isinstance(radius, (tuple, list)) else (radius, radius)
225-
if xy[0] < 0 or xy[1] < 0:
226-
msg = "radius must be >= 0"
226+
if not all(math.isfinite(value) and value >= 0 for value in xy):
227+
msg = "radius must be a finite number >= 0"
227228
raise ValueError(msg)
228229
self.radius = radius
229230

0 commit comments

Comments
 (0)