Blame SOURCES/0003-Prevent-a-double-free-in-the-error-code-path.patch

f8f308
From ad5a88046266478c2c9600f6d8a11ab707cb4c7e Mon Sep 17 00:00:00 2001
f8f308
From: Matthieu Herrb <matthieu@herrb.eu>
f8f308
Date: Thu, 12 Jan 2023 15:05:39 +1000
f8f308
Subject: [PATCH libXpm 3/6] Prevent a double free in the error code path
f8f308
f8f308
xpmParseDataAndCreate() calls XDestroyImage() in the error path.
f8f308
Reproducible with sxpm "zero-width.xpm", that file is in the test/
f8f308
directory.
f8f308
f8f308
The same approach is needed in the bytes_per_line == 0 condition though
f8f308
here it just plugs a memory leak.
f8f308
---
f8f308
 src/create.c | 6 +++++-
f8f308
 1 file changed, 5 insertions(+), 1 deletion(-)
f8f308
f8f308
diff --git a/src/create.c b/src/create.c
f8f308
index a750846..0f3735c 100644
f8f308
--- a/src/create.c
f8f308
+++ b/src/create.c
f8f308
@@ -994,11 +994,15 @@ CreateXImage(
f8f308
 #if !defined(FOR_MSW) && !defined(AMIGA)
f8f308
     if (height != 0 && (*image_return)->bytes_per_line >= INT_MAX / height) {
f8f308
 	XDestroyImage(*image_return);
f8f308
+	*image_return = NULL;
f8f308
 	return XpmNoMemory;
f8f308
     }
f8f308
     /* now that bytes_per_line must have been set properly alloc data */
f8f308
-    if((*image_return)->bytes_per_line == 0 ||  height == 0)
f8f308
+    if((*image_return)->bytes_per_line == 0 ||  height == 0) {
f8f308
+	XDestroyImage(*image_return);
f8f308
+	*image_return = NULL;
f8f308
     	return XpmNoMemory;
f8f308
+    }
f8f308
     (*image_return)->data =
f8f308
 	(char *) XpmMalloc((*image_return)->bytes_per_line * height);
f8f308
 
f8f308
-- 
f8f308
2.39.0
f8f308