[Fontconfig] fontconfig: Branch 'master'
Akira TAGOH
tagoh at kemper.freedesktop.org
Mon Feb 20 22:30:44 PST 2012
fc-match/fc-match.c | 5 +++++
src/fcmatch.c | 29 ++++++++++++++++++++++++++++-
2 files changed, 33 insertions(+), 1 deletion(-)
New commits:
commit a18ca17b6211f62fbd1d893811b94b8c83db4cc0
Author: Akira TAGOH <akira at tagoh.org>
Date: Tue Feb 21 15:29:56 2012 +0900
Bug 40452 - Running 'fc-match --all' core dumps when no fonts are installed
This would changes the behavior of FcFontSort().
it won't returns NULL afterward.
diff --git a/fc-match/fc-match.c b/fc-match/fc-match.c
index e64b4bc..095dd4e 100644
--- a/fc-match/fc-match.c
+++ b/fc-match/fc-match.c
@@ -175,6 +175,11 @@ main (int argc, char **argv)
int j;
font_patterns = FcFontSort (0, pat, all ? FcFalse : FcTrue, 0, &result);
+ if (!font_patterns || font_patterns->nfont == 0)
+ {
+ fputs("No fonts installed on the system\n", stderr);
+ return 1;
+ }
for (j = 0; j < font_patterns->nfont; j++)
{
FcPattern *font_pattern;
diff --git a/src/fcmatch.c b/src/fcmatch.c
index 1b9162b..422bc38 100644
--- a/src/fcmatch.c
+++ b/src/fcmatch.c
@@ -23,6 +23,7 @@
*/
#include "fcint.h"
+#include <assert.h>
#include <string.h>
#include <ctype.h>
#include <stdio.h>
@@ -395,6 +396,9 @@ FcFontRenderPrepare (FcConfig *config,
FcValue v;
FcResult result;
+ assert (pat != NULL);
+ assert (font != NULL);
+
new = FcPatternCreate ();
if (!new)
return 0;
@@ -514,6 +518,10 @@ FcFontSetMatch (FcConfig *config,
{
FcPattern *best;
+ assert (sets != NULL);
+ assert (p != NULL);
+ assert (result != NULL);
+
if (!config)
{
config = FcConfigGetCurrent ();
@@ -536,6 +544,9 @@ FcFontMatch (FcConfig *config,
int nsets;
FcPattern *best;
+ assert (p != NULL);
+ assert (result != NULL);
+
if (!config)
{
config = FcConfigGetCurrent ();
@@ -672,6 +683,19 @@ FcFontSetSort (FcConfig *config,
FcBool *patternLangSat;
FcValue patternLang;
+ assert (sets != NULL);
+ assert (p != NULL);
+ assert (result != NULL);
+
+ /* There are some implementation that relying on the result of
+ * "result" to check if the return value of FcFontSetSort
+ * is valid or not.
+ * So we should initialize it to the conservative way since
+ * this function doesn't return NULL anymore.
+ */
+ if (result)
+ *result = FcResultNoMatch;
+
if (FcDebug () & FC_DBG_MATCH)
{
printf ("Sort ");
@@ -686,7 +710,7 @@ FcFontSetSort (FcConfig *config,
nnodes += s->nfont;
}
if (!nnodes)
- goto bail0;
+ return FcFontSetCreate ();
for (nPatternLang = 0;
FcPatternGet (p, FC_LANG, nPatternLang, &patternLang) == FcResultMatch;
@@ -822,6 +846,9 @@ FcFontSort (FcConfig *config,
FcFontSet *sets[2];
int nsets;
+ assert (p != NULL);
+ assert (result != NULL);
+
if (!config)
{
config = FcConfigGetCurrent ();
More information about the Fontconfig
mailing list