]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcxml.c
Fix crash reported by Frederic Crozat when using libxml2.
[fontconfig.git] / src / fcxml.c
index b3777b9bb43247f3329a69551cc21ea3eb8551e0..ce92f649cc2d7107f47d9178e17c059b02841020 100644 (file)
@@ -933,7 +933,7 @@ FcConfigSaveAttr (const XML_Char **attr)
        return 0;
     slen = 0;
     for (i = 0; attr[i]; i++)
-       slen += strlen (attr[i]) + 1;
+       slen += strlen ((char *) attr[i]) + 1;
     n = i;
     new = malloc ((i + 1) * sizeof (FcChar8 *) + slen);
     if (!new)
@@ -1024,6 +1024,9 @@ FcConfigGetAttribute (FcConfigParse *parse, const char *attr)
        return 0;
 
     attrs = parse->pstack->attr;
+    if (!attrs)
+        return 0;
+
     while (*attrs)
     {
        if (!strcmp ((char *) *attrs, attr))
@@ -2368,6 +2371,12 @@ FcConfigParseAndLoad (FcConfig       *config,
     if (!filename)
        goto bail0;
     
+    if (FcStrSetMember (config->configFiles, filename))
+    {
+        FcStrFree (filename);
+        return FcTrue;
+    }
+
     if (!FcStrSetAdd (config->configFiles, filename))
     {
        FcStrFree (filename);
@@ -2385,9 +2394,10 @@ FcConfigParseAndLoad (FcConfig       *config,
        printf ("\tLoading config file %s\n", filename);
 
     f = fopen ((char *) filename, "r");
-    FcStrFree (filename);
-    if (!f)
+    if (!f) { 
+       FcStrFree (filename);
        goto bail0;
+    }
     
 #if ENABLE_LIBXML2
     memset(&sax, 0, sizeof(sax));
@@ -2398,10 +2408,11 @@ FcConfigParseAndLoad (FcConfig      *config,
     sax.endElement = FcEndElement;
     sax.characters = FcCharacterData;
 
-    p = xmlCreatePushParserCtxt (&sax, &parse, NULL, 0, filename);
+    p = xmlCreatePushParserCtxt (&sax, &parse, NULL, 0, (const char *) filename);
 #else
     p = XML_ParserCreate ("UTF-8");
 #endif
+    FcStrFree (filename);
 
     if (!p)
        goto bail1;