From 799691c901ea2d8561980c763a7e78383f1cceec Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 22 Sep 2008 18:16:30 -0400 Subject: [PATCH] Don't leak FcValues string loaded through fcxml.c (#17661) Patch from Caolan McNamara. --- src/fcpat.c | 10 +++++----- src/fcxml.c | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/fcpat.c b/src/fcpat.c index f9b533c..4bff659 100644 --- a/src/fcpat.c +++ b/src/fcpat.c @@ -27,7 +27,7 @@ #include static FcBool -FcStrHashed (const FcChar8 *name); +FcHashOwnsName(const FcChar8 *name); FcPattern * FcPatternCreate (void) @@ -50,7 +50,7 @@ FcValueDestroy (FcValue v) { switch (v.type) { case FcTypeString: - if (!FcStrHashed (v.u.s)) + if (!FcHashOwnsName(v.u.s)) FcStrFree ((FcChar8 *) v.u.s); break; case FcTypeMatrix: @@ -131,7 +131,7 @@ FcValueListDestroy (FcValueListPtr l) { switch (l->value.type) { case FcTypeString: - if (!FcStrHashed ((FcChar8 *)l->value.u.s)) + if (!FcHashOwnsName((FcChar8 *)l->value.u.s)) FcStrFree ((FcChar8 *)l->value.u.s); break; case FcTypeMatrix: @@ -1041,14 +1041,14 @@ static struct objectBucket { } *FcObjectBuckets[OBJECT_HASH_SIZE]; static FcBool -FcStrHashed (const FcChar8 *name) +FcHashOwnsName (const FcChar8 *name) { FcChar32 hash = FcStringHash (name); struct objectBucket **p; struct objectBucket *b; for (p = &FcObjectBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) - if (b->hash == hash && !strcmp ((char *)name, (char *) (b + 1))) + if (b->hash == hash && ((char *)name == (char *) (b + 1))) return FcTrue; return FcFalse; } diff --git a/src/fcxml.c b/src/fcxml.c index efdb297..b679dd1 100644 --- a/src/fcxml.c +++ b/src/fcxml.c @@ -1997,8 +1997,10 @@ FcParsePatelt (FcConfigParse *parse) if (!FcPatternAdd (pattern, name, value, FcTrue)) { FcConfigMessage (parse, FcSevereError, "out of memory"); + FcValueDestroy(value); break; } + FcValueDestroy(value); } FcVStackPushPattern (parse, pattern); -- 2.39.2