From c305e8c09a614a355c8783ea8d26c83f4435d37e Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Tue, 30 Jun 2026 17:11:53 +0300 Subject: [PATCH 1/2] Use ImagingNewDirty() in font.getmask() and RankFilter The image is always zero-filled anyway. --- src/_imaging.c | 2 +- src/libImaging/RankFilter.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/_imaging.c b/src/_imaging.c index 3cd762ff5c1..2f884b5387d 100644 --- a/src/_imaging.c +++ b/src/_imaging.c @@ -2876,7 +2876,7 @@ _font_getmask(ImagingFontObject *self, PyObject *args) { free(text); return NULL; } - im = ImagingNew(self->bitmap->mode, xsize, self->ysize); + im = ImagingNewDirty(self->bitmap->mode, xsize, self->ysize); // Emptied below if (!im) { free(text); return ImagingError_MemoryError(); diff --git a/src/libImaging/RankFilter.c b/src/libImaging/RankFilter.c index 997ab53080d..9b13b103283 100644 --- a/src/libImaging/RankFilter.c +++ b/src/libImaging/RankFilter.c @@ -84,7 +84,8 @@ MakeRankFunction(UINT8) MakeRankFunction(INT32) MakeRankFunction(FLOAT32) return (Imaging)ImagingError_ValueError("bad rank value"); } - imOut = ImagingNew(im->mode, im->xsize - 2 * margin, im->ysize - 2 * margin); + // Every output pixel is written by the rank loop below + imOut = ImagingNewDirty(im->mode, im->xsize - 2 * margin, im->ysize - 2 * margin); if (!imOut) { return NULL; } From d0dbc436d2112652289f9cb5be3fbf5bfb59bab8 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 3 Jul 2026 21:51:41 +1000 Subject: [PATCH 2/2] Remove ImagingFill call --- src/_imaging.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/_imaging.c b/src/_imaging.c index 2f884b5387d..897e718e30a 100644 --- a/src/_imaging.c +++ b/src/_imaging.c @@ -2876,15 +2876,12 @@ _font_getmask(ImagingFontObject *self, PyObject *args) { free(text); return NULL; } - im = ImagingNewDirty(self->bitmap->mode, xsize, self->ysize); // Emptied below + im = ImagingNew(self->bitmap->mode, xsize, self->ysize); if (!im) { free(text); return ImagingError_MemoryError(); } - b = 0; - (void)ImagingFill(im, &b); - b = self->baseline; for (x = 0; text[i]; i++) { glyph = &self->glyphs[text[i]];