[PATCH:app/bitmap 2/2] Stop memory leak in XmuWriteBitmapDataToFile()

Alan Coopersmith alan.coopersmith at oracle.com
Mon Dec 29 18:39:10 PST 2014


StripFilename() allocates a new string for its result, so after we're
done with it, free it instead of just losing the pointer to it.

Fixes errors found by Oracle Parfait 1.5.1 bug checking tool:

Error: Memory leak (CWE 401)
   Memory leak of pointer basename allocated with StripFilename(filename)
        at line 712 of Bitmap.c in function 'XmuWriteBitmapDataToFile'.
          basename allocated at line 691 with StripFilename(filename).
          basename leaks when i >= data_length at line 702.
Error: Memory leak (CWE 401)
   Memory leak of pointer basename allocated with StripFilename(filename)
        at line 715 of Bitmap.c in function 'XmuWriteBitmapDataToFile'.
          basename allocated at line 691 with StripFilename(filename).

Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
---
 Bitmap.c |   11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/Bitmap.c b/Bitmap.c
index 2a8e46d..8fbead9 100644
--- a/Bitmap.c
+++ b/Bitmap.c
@@ -687,10 +687,14 @@ XmuWriteBitmapDataToFile(_Xconst _XtString filename,
     else
     	file = fopen(filename, "w+");
 
-    if (!basename || !strcmp(basename, "") || !strcmp(basename, "-"))
-	basename = StripFilename(filename);
-
     if (file) {
+	String new_basename;
+
+	if (!basename || !strcmp(basename, "") || !strcmp(basename, "-"))
+	    basename = new_basename = StripFilename(filename);
+	else
+	    new_basename = NULL;
+
 	fprintf(file, "#define %s_width %d\n", basename, width);
 	fprintf(file, "#define %s_height %d\n", basename, height);
 	if (QuerySet(x_hot, y_hot)) {
@@ -709,6 +713,7 @@ XmuWriteBitmapDataToFile(_Xconst _XtString filename,
 	if (file != stdout)
 	    fclose(file);
 
+	XtFree(new_basename);
 	return BitmapSuccess;
     }
 
-- 
1.7.9.2



More information about the xorg-devel mailing list