Fix crash with empty xsl:key/@match attribute
authorNick Wellnhofer <wellnhofer@aevum.de>
Sun, 21 Oct 2012 17:02:25 +0000 (19:02 +0200)
committerNick Wellnhofer <wellnhofer@aevum.de>
Sun, 21 Oct 2012 17:03:46 +0000 (19:03 +0200)
See https://bugzilla.gnome.org/show_bug.cgi?id=685328

Also improve some xsl:key error messages.

libxslt/keys.c

index a995338..b8f1455 100644 (file)
@@ -312,8 +312,8 @@ xsltAddKey(xsltStylesheetPtr style, const xmlChar *name,
                end = skipPredicate(match, end);
                if (end <= 0) {
                    xsltTransformError(NULL, style, inst,
-                                      "key pattern is malformed: %s",
-                                      key->match);
+                       "xsl:key : 'match' pattern is malformed: %s",
+                       key->match);
                    if (style != NULL) style->errors++;
                    goto error;
                }
@@ -322,7 +322,7 @@ xsltAddKey(xsltStylesheetPtr style, const xmlChar *name,
        }
        if (current == end) {
            xsltTransformError(NULL, style, inst,
-                              "key pattern is empty\n");
+                              "xsl:key : 'match' pattern is empty\n");
            if (style != NULL) style->errors++;
            goto error;
        }
@@ -345,6 +345,12 @@ xsltAddKey(xsltStylesheetPtr style, const xmlChar *name,
        }
        current = end;
     }
+    if (pattern == NULL) {
+        xsltTransformError(NULL, style, inst,
+                           "xsl:key : 'match' pattern is empty\n");
+        if (style != NULL) style->errors++;
+        goto error;
+    }
 #ifdef WITH_XSLT_DEBUG_KEYS
     xsltGenericDebug(xsltGenericDebugContext,
        "   resulting pattern %s\n", pattern);
@@ -364,7 +370,7 @@ xsltAddKey(xsltStylesheetPtr style, const xmlChar *name,
 #endif
     if (key->comp == NULL) {
        xsltTransformError(NULL, style, inst,
-               "xsl:key : XPath pattern compilation failed '%s'\n",
+               "xsl:key : 'match' pattern compilation failed '%s'\n",
                         pattern);
        if (style != NULL) style->errors++;
     }
@@ -375,7 +381,7 @@ xsltAddKey(xsltStylesheetPtr style, const xmlChar *name,
 #endif
     if (key->usecomp == NULL) {
        xsltTransformError(NULL, style, inst,
-               "xsl:key : XPath pattern compilation failed '%s'\n",
+               "xsl:key : 'use' expression compilation failed '%s'\n",
                         use);
        if (style != NULL) style->errors++;
     }