From 08c7b17e236d3e7a431ff40f862ca4de2a5c67df Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Mon, 9 Jan 2023 19:04:55 +0200 Subject: [PATCH 1/2] Raise ValueError for BoxBlur filter with negative radius --- Tests/test_image_filter.py | 6 ++++++ src/PIL/ImageFilter.py | 3 +++ 2 files changed, 9 insertions(+) diff --git a/Tests/test_image_filter.py b/Tests/test_image_filter.py index cfe46b65898..ece98f73d7a 100644 --- a/Tests/test_image_filter.py +++ b/Tests/test_image_filter.py @@ -24,6 +24,7 @@ ImageFilter.ModeFilter, ImageFilter.GaussianBlur, ImageFilter.GaussianBlur(5), + ImageFilter.BoxBlur(0), ImageFilter.BoxBlur(5), ImageFilter.UnsharpMask, ImageFilter.UnsharpMask(10), @@ -173,3 +174,8 @@ def test_consistency_5x5(mode): Image.merge(mode, source[: len(mode)]).filter(kernel), Image.merge(mode, reference[: len(mode)]), ) + + +def test_invalid_box_blur_filter(): + with pytest.raises(ValueError): + ImageFilter.BoxBlur(-2) diff --git a/src/PIL/ImageFilter.py b/src/PIL/ImageFilter.py index 59e2c18b9ac..63d6dcf5cec 100644 --- a/src/PIL/ImageFilter.py +++ b/src/PIL/ImageFilter.py @@ -183,6 +183,9 @@ class BoxBlur(MultibandFilter): name = "BoxBlur" def __init__(self, radius): + if radius < 0: + msg = "radius must be >= 0" + raise ValueError(msg) self.radius = radius def filter(self, image): From 173b65d0956e0e5f15c52b0bb46c6694446eace5 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Wed, 11 Jan 2023 20:02:10 +1100 Subject: [PATCH 2/2] Raise ValueError during filter operation as well --- Tests/test_image_filter.py | 6 ++++++ src/libImaging/BoxBlur.c | 3 +++ 2 files changed, 9 insertions(+) diff --git a/Tests/test_image_filter.py b/Tests/test_image_filter.py index ece98f73d7a..a2ef2280b72 100644 --- a/Tests/test_image_filter.py +++ b/Tests/test_image_filter.py @@ -179,3 +179,9 @@ def test_consistency_5x5(mode): def test_invalid_box_blur_filter(): with pytest.raises(ValueError): ImageFilter.BoxBlur(-2) + + im = hopper() + box_blur_filter = ImageFilter.BoxBlur(2) + box_blur_filter.radius = -2 + with pytest.raises(ValueError): + im.filter(box_blur_filter) diff --git a/src/libImaging/BoxBlur.c b/src/libImaging/BoxBlur.c index 2e45a33587c..5afe7cf5043 100644 --- a/src/libImaging/BoxBlur.c +++ b/src/libImaging/BoxBlur.c @@ -237,6 +237,9 @@ ImagingBoxBlur(Imaging imOut, Imaging imIn, float radius, int n) { if (n < 1) { return ImagingError_ValueError("number of passes must be greater than zero"); } + if (radius < 0) { + return ImagingError_ValueError("radius must be >= 0"); + } if (strcmp(imIn->mode, imOut->mode) || imIn->type != imOut->type || imIn->bands != imOut->bands || imIn->xsize != imOut->xsize ||