]> git.wh0rd.org - fontconfig.git/commitdiff
Missing bits from previous patches.
authorPatrick Lam <plam@MIT.EDU>
Tue, 11 Apr 2006 16:54:24 +0000 (16:54 +0000)
committerPatrick Lam <plam@MIT.EDU>
Tue, 11 Apr 2006 16:54:24 +0000 (16:54 +0000)
Remove extra semi-colon.
Fix memory leak in error case (Coverity defects #776, #985).
Fix memory leaks (Coverity defects #779, #781) and memory use after free
    (Coverity defect #780).
reviewed by: plam

ChangeLog
src/fccfg.c
src/fccharset.c
src/fclang.c
src/fcxml.c

index fdd376a1c6ec62b6e4701e0e9a0214950174c1a6..5647a49547403a98aff144333fe672d078fdaa59 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2006-04-11  Frederic Crozat  <fcrozat@mandriva.com>
+       reviewed by: plam
+
+       * src/fccharset.c: (FcCharSetPutLeaf):
+       * src/fclang.c: (FcNameUnparseLangSet):
+
+       Missing bits from previous patches.
+
+       * src/fccharset.c (FcCharSetSubtractCount):
+       Remove extra semi-colon.
+
+       * src/fccfg.c: (FcConfigBuildFonts):
+       Fix memory leak in error case (Coverity defects #776, #985).
+
+       * src/fcxml.c: (FcPopBinary, FcParsePatelt, FcParsePattern):
+       Fix memory leaks (Coverity defects #779, #781) 
+       and memory use after free (Coverity defect #780).
+
 2006-04-11  Patrick Lam  <plam@mit.edu>
        * src/fccharset.c (FcCharSetPutLeaf):
 
index fc70fefd09af5fcefbd0e1408d61a0857e6df930..35ab73a9aa79c70def7e20f0bd999a9208c24068 100644 (file)
@@ -283,7 +283,7 @@ FcConfigBuildFonts (FcConfig *config)
     {
        list = FcConfigGetFontDirs (config);
        if (!list)
-           goto bail2;
+           goto bail3;
        
        while ((dir = FcStrListNext (list)))
        {
@@ -334,9 +334,10 @@ FcConfigBuildFonts (FcConfig *config)
     FcConfigSetFonts (config, fonts, FcSetSystem);
     
     return FcTrue;
+bail3:
+    FcStrSetDestroy (oldDirs);
 bail2:
     FcGlobalCacheDestroy (cache);
-    FcStrSetDestroy (oldDirs);
 bail1:
     FcFontSetDestroy (fonts);
 bail0:
@@ -605,17 +606,21 @@ FcBool
 FcConfigAddBlank (FcConfig     *config,
                  FcChar32      blank)
 {
-    FcBlanks   *b;
+    FcBlanks   *b, *freeme = 0;
     
     b = config->blanks;
     if (!b)
     {
-       b = FcBlanksCreate ();
+       freeme = b = FcBlanksCreate ();
        if (!b)
            return FcFalse;
     }
     if (!FcBlanksAdd (b, blank))
+    {
+        if (freeme)
+            FcBlanksDestroy (freeme);
        return FcFalse;
+    }
     config->blanks = b;
     return FcTrue;
 }
index 531a9b8cc6e8edd8935b0dfd9963c720081c5d30..dcc84574cd16ac4e97dd2f070e6dd1cc6b4fba2b 100644 (file)
@@ -177,7 +177,10 @@ FcCharSetPutLeaf (FcCharSet        *fcs,
        FcMemAlloc (FC_MEM_CHARSET, (fcs->num + 1) * sizeof (FcCharLeaf *));
        numbers = malloc ((fcs->num + 1) * sizeof (FcChar16));
        if (!numbers)
+        {
+           free (leaves);
            return FcFalse;
+        }
        FcMemAlloc (FC_MEM_CHARSET, (fcs->num + 1) * sizeof (FcChar16));
 
        for (i = 0; i < fcs->num; i++)
@@ -625,7 +628,7 @@ FcCharSetSubtractCount (const FcCharSet *a, const FcCharSet *b)
            int         i = 256/32;
            if (ai.ucs4 == bi.ucs4)
            {
-               FcChar32        *bm = bi.leaf->map;;
+               FcChar32        *bm = bi.leaf->map;
                while (i--)
                    count += FcCharSetPopCount (*am++ & ~*bm++);
            }
index 4d171acf24cded4ee519fc06d97ab4b5a18e7ce0..552253d2dee366db68685f1670e5ea8ab5dc41e3 100644 (file)
@@ -578,6 +578,7 @@ FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls)
                 }
            first = FcFalse;
        }
+        FcStrListDone (list);
     }
     return FcTrue;
 }
index 1afa4e70d03f9d78ecea4f125768e18dc25c54aa..7deeb137863a90b7e5a99ce7ba72bb45392964a1 100644 (file)
@@ -1541,7 +1541,7 @@ FcPopBinary (FcConfigParse *parse, FcOp op)
                FcConfigMessage (parse, FcSevereError, "out of memory");
                FcExprDestroy (left);
                FcExprDestroy (expr);
-               break;
+               return 0;
            }
            expr = new;
        }
@@ -1950,6 +1950,7 @@ FcParsePatelt (FcConfigParse *parse)
     if (!name)
     {
        FcConfigMessage (parse, FcSevereWarning, "missing pattern element name");
+       FcPatternDestroy (pattern);
        return;
     }
     
@@ -1988,6 +1989,7 @@ FcParsePattern (FcConfigParse *parse)
            if (!FcPatternAppend (pattern, vstack->u.pattern))
            {
                FcConfigMessage (parse, FcSevereError, "out of memory");
+               FcPatternDestroy (pattern);
                return;
            }
            break;