[Fontconfig] strange code in FcCharSetPutLeaf (spotted by Coverity)

Patrick Lam plam at MIT.EDU
Tue Apr 11 07:21:14 PDT 2006


Frederic Crozat wrote:
> Coverity found two memory leaks in fccharset.c : FcCharSetPutLeaf (#1192
> and #1193) in the "if (fcs->bank != FC_BANK_DYNAMIC)" TRUE branch :
> leaves and numbers. But after reading this part of the code, I'm not
> sure if it is doing anything at all : memory is allocated for leaves and
> numbers but those variables are not used at all after "if () {} else {}"
> stuff, so they are leaked and not used at all..
> 
> Could somebody with much more knowledge of this code check it ?

Oops!  I meant to do this:

Index: src/fccharset.c
===================================================================
RCS file: /cvs/fontconfig/fontconfig/src/fccharset.c,v
retrieving revision 1.25.4.13
diff -u -p -r1.25.4.13 fccharset.c
--- src/fccharset.c     7 Apr 2006 17:27:39 -0000       1.25.4.13
+++ src/fccharset.c     11 Apr 2006 14:18:55 -0000
@@ -168,6 +168,7 @@ FcCharSetPutLeaf (FcCharSet *fcs,
         return FcFalse;
      if (fcs->bank != FC_BANK_DYNAMIC)
      {
+        /* convert to dynamic */
         int i;

         leaves = malloc ((fcs->num + 1) * sizeof (FcCharLeaf *));
@@ -183,6 +184,10 @@ FcCharSetPutLeaf (FcCharSet        *fcs,
             leaves[i] = FcCharSetGetLeaf(fcs, i);
         memcpy (numbers, FcCharSetGetNumbers(fcs),
                 fcs->num * sizeof (FcChar16));
+
+       fcs->bank = FC_BANK_DYNAMIC;
+       fcs->u.dyn.leaves = leaves;
+       fcs->u.dyn.numbers = numbers;
      }
      else
      {

I've committed all of your patches as well as this one.

pat


More information about the Fontconfig mailing list