From 00ce37145556279f4982ef52a747cb2f5e3e3081 Mon Sep 17 00:00:00 2001 From: Christian C Date: Wed, 2 Apr 2025 18:15:13 -0700 Subject: Fixed Memory Leak --- lib/data/image_types.c | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) (limited to 'lib/data') diff --git a/lib/data/image_types.c b/lib/data/image_types.c index f5c9115..6e8f6b4 100644 --- a/lib/data/image_types.c +++ b/lib/data/image_types.c @@ -68,29 +68,45 @@ Mask *create_image_mask(size_t width, size_t height) { } void free_image(Image *image) { - if (image->image[0] != NULL) { - g_free(image->image[0]); - image->image[0] = NULL; + if (image == NULL) { + return; } - if (image->image != NULL) { - g_free(image->image); - image->image = NULL; + if (image->image == NULL) { + g_free(image); + return; } - if (image != NULL) { + if (image->image[0] != NULL) { + if (image->image[0][0] != NULL) { + g_free(image->image[0][0]); + } + } else { + g_free(image->image); g_free(image); + return; + } + for (size_t y = 0; y < image->height; y++) { + if (image->image[y] != NULL) { + g_free(image->image[y]); + } } + g_free(image->image); + image->image = NULL; + g_free(image); } void free_image_mask(Mask *image_mask) { + if (image_mask == NULL) { + return; + } + if (image_mask->image == NULL) { + g_free(image_mask); + return; + } if (image_mask->image[0] != NULL) { g_free(image_mask->image[0]); image_mask->image[0] = NULL; } - if (image_mask->image != NULL) { - g_free(image_mask->image); - image_mask->image = NULL; - } - if (image_mask != NULL) { - g_free(image_mask); - } + g_free(image_mask->image); + image_mask->image = NULL; + g_free(image_mask); } -- cgit v1.2.1