From 39a3b1d83edcf826c3864e26bedff5b4e4dd331b Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 1 Jul 2023 18:09:27 +1000 Subject: [PATCH] Fixed deallocating mask images --- src/PIL/ImageFont.py | 12 ++++++++++-- src/_imagingft.c | 7 ++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/PIL/ImageFont.py b/src/PIL/ImageFont.py index b7d40208c83..05828a72fdf 100644 --- a/src/PIL/ImageFont.py +++ b/src/PIL/ImageFont.py @@ -562,9 +562,17 @@ def getmask2( _string_length_check(text) if start is None: start = (0, 0) - im, size, offset = self.font.render( + im = None + + def fill(mode, size): + nonlocal im + + im = Image.core.fill(mode, size) + return im + + size, offset = self.font.render( text, - Image.core.fill, + fill, mode, direction, features, diff --git a/src/_imagingft.c b/src/_imagingft.c index fd325524427..62819a569bc 100644 --- a/src/_imagingft.c +++ b/src/_imagingft.c @@ -882,7 +882,7 @@ font_render(FontObject *self, PyObject *args) { if (max_image_pixels != Py_None) { if ((long long)(width > 1 ? width : 1) * (height > 1 ? height : 1) > PyLong_AsLongLong(max_image_pixels) * 2) { PyMem_Del(glyph_info); - return Py_BuildValue("O(ii)(ii)", Py_None, width, height, 0, 0); + return Py_BuildValue("(ii)(ii)", width, height, 0, 0); } } @@ -898,7 +898,7 @@ font_render(FontObject *self, PyObject *args) { y_offset -= stroke_width; if (count == 0 || width == 0 || height == 0) { PyMem_Del(glyph_info); - return Py_BuildValue("O(ii)(ii)", image, width, height, x_offset, y_offset); + return Py_BuildValue("(ii)(ii)", width, height, x_offset, y_offset); } if (stroke_width) { @@ -1113,9 +1113,10 @@ font_render(FontObject *self, PyObject *args) { if (bitmap_converted_ready) { FT_Bitmap_Done(library, &bitmap_converted); } + Py_DECREF(image); FT_Stroker_Done(stroker); PyMem_Del(glyph_info); - return Py_BuildValue("O(ii)(ii)", image, width, height, x_offset, y_offset); + return Py_BuildValue("(ii)(ii)", width, height, x_offset, y_offset); glyph_error: if (im->destroy) {