[Fontconfig] fontconfig: Branch 'master'

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Dec 14 11:22:16 UTC 2020


 fc-match/fc-match.c  |    8 +++++++-
 src/fcxml.c          |    4 +++-
 test/test-bz106632.c |    8 ++++++++
 test/test-issue180.c |    4 +++-
 4 files changed, 21 insertions(+), 3 deletions(-)

New commits:
commit d55eaa6b3148691f32ec19c5c36dfc8818a6385f
Author: Ben Wagner <bungeman at chromium.org>
Date:   Fri Dec 11 11:54:43 2020 -0500

    Fix leaks in fcxml.c, fc-match.c, and tests.
    
    Fix leaks reported by AddressSanitizer when running 'make check'.

diff --git a/fc-match/fc-match.c b/fc-match/fc-match.c
index 4362ec1..f31047e 100644
--- a/fc-match/fc-match.c
+++ b/fc-match/fc-match.c
@@ -117,6 +117,7 @@ main (int argc, char **argv)
     int			brief = 0;
     int			sort = 0, all = 0;
     const FcChar8	*format = NULL;
+    const FcChar8	*format_optarg = NULL;
     int			i;
     FcObjectSet		*os = 0;
     FcFontSet		*fs;
@@ -146,7 +147,7 @@ main (int argc, char **argv)
 	    brief = 1;
 	    break;
 	case 'f':
-	    format = (FcChar8 *) strdup (optarg);
+	    format = format_optarg = (FcChar8 *) strdup (optarg);
 	    break;
 	case 'V':
 	    fprintf (stderr, "fontconfig version %d.%d.%d\n", 
@@ -269,5 +270,10 @@ main (int argc, char **argv)
 
     FcFini ();
 
+    if (format_optarg) {
+	free ((void*)format_optarg);
+	format_optarg = NULL;
+    }
+
     return 0;
 }
diff --git a/src/fcxml.c b/src/fcxml.c
index 3f22581..9efe157 100644
--- a/src/fcxml.c
+++ b/src/fcxml.c
@@ -2307,7 +2307,9 @@ FcParseCacheDir (FcConfigParse *parse)
     if (data[0] == 0)
     {
 	FcConfigMessage (parse, FcSevereWarning, "empty cache directory name ignored");
-	return;
+	FcStrFree (data);
+	data = prefix;
+	goto bail;
     }
     if (prefix)
     {
diff --git a/test/test-bz106632.c b/test/test-bz106632.c
index 0f37b9c..c610d73 100644
--- a/test/test-bz106632.c
+++ b/test/test-bz106632.c
@@ -221,6 +221,7 @@ main (void)
 	ret = 1;
 	goto bail;
     }
+    FcFontSetDestroy (fs);
     fprintf (stderr, "D: Removing %s\n", fontdir);
     snprintf (cmd, 512, "sleep 1; rm -f %s%s*; sleep 1", fontdir, FC_DIR_SEPARATOR_S);
     (void) system (cmd);
@@ -243,6 +244,8 @@ main (void)
 	ret = 3;
 	goto bail;
     }
+    FcConfigDestroy (config);
+
     config = FcConfigCreate ();
     if (!FcConfigParseAndLoadFromMemory (config, (const FcChar8 *) conf, FcTrue))
     {
@@ -266,6 +269,7 @@ main (void)
 	ret = 1;
 	goto bail;
     }
+    FcFontSetDestroy (fs);
     fprintf (stderr, "D: Copying %s to %s\n", FONTFILE, fontdir);
     snprintf (cmd, 512, "sleep 1; cp -a %s %s; sleep 1", FONTFILE, fontdir);
     (void) system (cmd);
@@ -288,6 +292,8 @@ main (void)
 	ret = 3;
 	goto bail;
     }
+    FcConfigDestroy (config);
+
     config = FcConfigCreate ();
     if (!FcConfigParseAndLoadFromMemory (config, (const FcChar8 *) conf, FcTrue))
     {
@@ -311,6 +317,8 @@ main (void)
 	ret = 1;
 	goto bail;
     }
+    FcFontSetDestroy (fs);
+    FcConfigDestroy (config);
 
 bail:
     fprintf (stderr, "Cleaning up\n");
diff --git a/test/test-issue180.c b/test/test-issue180.c
index 2832d3b..9d0795e 100644
--- a/test/test-issue180.c
+++ b/test/test-issue180.c
@@ -53,7 +53,9 @@ main (void)
 	fprintf (stderr, "There was one or more cachedirs\n");
 	return 1;
     }
+    FcStrListDone (l);
     FcConfigDestroy (cfg);
+
     cfg = FcConfigCreate ();
     if (!FcConfigParseAndLoadFromMemory (cfg, doc2, FcTrue))
     {
@@ -66,7 +68,7 @@ main (void)
 	fprintf (stderr, "There was one or more cachedirs (with prefix)\n");
 	return 1;
     }
-
+    FcStrListDone (l);
     FcConfigDestroy (cfg);
 
     return 0;


More information about the Fontconfig mailing list