Update of /cvsroot/fink/dists/10.4-transitional/unstable/main/finkinfo/libs
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18442

Modified Files:
        libxslt.info 
Added Files:
        libxslt.patch 
Log Message:
Patching libxslt to avoid segfault when processing docbook files with fop

--- NEW FILE: libxslt.patch ---
--- libxslt-1.1.15/libxslt/pattern.c    2005-09-05 00:41:43.000000000 +0200
+++ libxslt-1.1.15/libxslt/pattern-patched.c    2005-12-01 21:41:39.000000000 
+0100
@@ -268,6 +268,7 @@
  * @op:  an op
  * @value:  the first value
  * @value2:  the second value
+ * @novar:  flag to set XML_XPATH_NOVAR
  *
  * Add an step to an XSLT Compiled Match
  *
@@ -275,7 +276,7 @@
  */
 static int
 xsltCompMatchAdd(xsltParserContextPtr ctxt, xsltCompMatchPtr comp,
-                 xsltOp op, xmlChar * value, xmlChar * value2)
+                 xsltOp op, xmlChar * value, xmlChar * value2, int novar)
 {
     if (comp->nbStep >= 40) {
         xsltTransformError(NULL, NULL, NULL,
@@ -308,7 +309,8 @@
        else
            xctxt = xmlXPathNewContext(NULL);
 #ifdef XML_XPATH_NOVAR
-       xctxt->flags = XML_XPATH_NOVAR;
+       if (novar != 0)
+           xctxt->flags = XML_XPATH_NOVAR;
 #endif
        if (ctxt->style != NULL)
            xctxt->dict = ctxt->style->dict;
@@ -317,7 +319,8 @@
        if (comp->steps[comp->nbStep].comp == NULL) {
            xsltTransformError(NULL, ctxt->style, ctxt->elem,
                    "Failed to compile predicate\n");
-           ctxt->style->errors++;
+           if (ctxt->style != NULL)
+               ctxt->style->errors++;
        }
     }
     comp->nbStep++;
@@ -1181,8 +1184,8 @@
 #define NEXT ((*ctxt->cur) ?  ctxt->cur++: ctxt->cur)
 
 
-#define PUSH(op, val, val2)                                            \
-    if (xsltCompMatchAdd(ctxt, ctxt->comp, (op), (val), (val2))) goto error;
+#define PUSH(op, val, val2, novar)                                             
\
+    if (xsltCompMatchAdd(ctxt, ctxt->comp, (op), (val), (val2), (novar))) goto 
error;
 
 #define SWAP()                                                 \
     xsltSwapTopCompMatch(ctxt->comp);
@@ -1358,6 +1361,7 @@
  * @ctxt:  the compilation context
  * @name:  a preparsed name
  * @aid:  whether id/key are allowed there
+ * @novar:  flag to prohibit xslt var
  *
  * Compile the XSLT LocationIdKeyPattern
  * [3] IdKeyPattern ::= 'id' '(' Literal ')'
@@ -1370,7 +1374,8 @@
  *                 | 'processing-instruction' '(' Literal ')'
  */
 static void
-xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) {
+xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name,
+               int aid, int novar) {
     xmlChar *lit = NULL;
     xmlChar *lit2 = NULL;
 
@@ -1394,7 +1399,7 @@
            return;
        }
        NEXT;
-       PUSH(XSLT_OP_ID, lit, NULL);
+       PUSH(XSLT_OP_ID, lit, NULL, novar);
     } else if ((aid) && (xmlStrEqual(name, (const xmlChar *)"key"))) {
        NEXT;
        SKIP_BLANKS;
@@ -1422,7 +1427,7 @@
        }
        NEXT;
        /* TODO: support namespace in keys */
-       PUSH(XSLT_OP_KEY, lit, lit2);
+       PUSH(XSLT_OP_KEY, lit, lit2, novar);
     } else if (xmlStrEqual(name, (const xmlChar *)"processing-instruction")) {
        NEXT;
        SKIP_BLANKS;
@@ -1439,7 +1444,7 @@
            }
        }
        NEXT;
-       PUSH(XSLT_OP_PI, lit, NULL);
+       PUSH(XSLT_OP_PI, lit, NULL, novar);
     } else if (xmlStrEqual(name, (const xmlChar *)"text")) {
        NEXT;
        SKIP_BLANKS;
@@ -1450,7 +1455,7 @@
            return;
        }
        NEXT;
-       PUSH(XSLT_OP_TEXT, NULL, NULL);
+       PUSH(XSLT_OP_TEXT, NULL, NULL, novar);
     } else if (xmlStrEqual(name, (const xmlChar *)"comment")) {
        NEXT;
        SKIP_BLANKS;
@@ -1461,7 +1466,7 @@
            return;
        }
        NEXT;
-       PUSH(XSLT_OP_COMMENT, NULL, NULL);
+       PUSH(XSLT_OP_COMMENT, NULL, NULL, novar);
     } else if (xmlStrEqual(name, (const xmlChar *)"node")) {
        NEXT;
        SKIP_BLANKS;
@@ -1472,7 +1477,7 @@
            return;
        }
        NEXT;
-       PUSH(XSLT_OP_NODE, NULL, NULL);
+       PUSH(XSLT_OP_NODE, NULL, NULL, novar);
     } else if (aid) {
        xsltTransformError(NULL, NULL, NULL,
            "xsltCompileIdKeyPattern : expecting 'key' or 'id' or node type\n");
@@ -1493,6 +1498,7 @@
  * xsltCompileStepPattern:
  * @ctxt:  the compilation context
  * @token:  a posible precompiled name
+ * @novar: flag to prohibit xslt variables from pattern
  *
  * Compile the XSLT StepPattern and generates a precompiled
  * form suitable for fast matching.
@@ -1511,7 +1517,7 @@
  */
 
 static void
-xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) {
+xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token, int novar) {
     xmlChar *name = NULL;
     const xmlChar *URI = NULL;
     xmlChar *URL = NULL;
@@ -1524,7 +1530,7 @@
        NEXT;
        if (CUR == '*') {
            NEXT;
-           PUSH(XSLT_OP_ATTR, NULL, NULL);
+           PUSH(XSLT_OP_ATTR, NULL, NULL, novar);
            goto parse_predicate;
        }
        token = xsltScanQName(ctxt, &prefix);
@@ -1544,7 +1550,7 @@
        if (token == NULL) {
            if (CUR == '*') {
                NEXT;
-               PUSH(XSLT_OP_ATTR, NULL, URL);
+               PUSH(XSLT_OP_ATTR, NULL, URL, novar);
                return;
            }
            xsltTransformError(NULL, NULL, NULL,
@@ -1552,7 +1558,7 @@
            ctxt->error = 1;
            goto error;
        }
-       PUSH(XSLT_OP_ATTR, token, URL);
+       PUSH(XSLT_OP_ATTR, token, URL, novar);
        goto parse_predicate;
     }
     if (token == NULL)
@@ -1560,7 +1566,7 @@
     if (token == NULL) {
        if (CUR == '*') {
            NEXT;
-           PUSH(XSLT_OP_ALL, token, NULL);
+           PUSH(XSLT_OP_ALL, token, NULL, novar);
            goto parse_predicate;
        } else {
            xsltTransformError(NULL, NULL, NULL,
@@ -1573,7 +1579,7 @@
 
     SKIP_BLANKS;
     if (CUR == '(') {
-       xsltCompileIdKeyPattern(ctxt, token, 0);
+       xsltCompileIdKeyPattern(ctxt, token, 0, novar);
        if (ctxt->error)
            goto error;
     } else if (CUR == ':') {
@@ -1600,7 +1606,7 @@
            if (token == NULL) {
                if (CUR == '*') {
                    NEXT;
-                   PUSH(XSLT_OP_NS, URL, NULL);
+                   PUSH(XSLT_OP_NS, URL, NULL, novar);
                } else {
                    xsltTransformError(NULL, NULL, NULL,
                            "xsltCompileStepPattern : Name expected\n");
@@ -1608,7 +1614,7 @@
                    goto error;
                }
            } else {
-               PUSH(XSLT_OP_ELEM, token, URL);
+               PUSH(XSLT_OP_ELEM, token, URL, novar);
            }
        } else {
            NEXT;
@@ -1618,7 +1624,7 @@
                if (token == NULL) {
                    if (CUR == '*') {
                        NEXT;
-                       PUSH(XSLT_OP_ALL, token, NULL);
+                       PUSH(XSLT_OP_ALL, token, NULL, novar);
                        goto parse_predicate;
                    } else {
                        xsltTransformError(NULL, NULL, NULL,
@@ -1636,7 +1642,7 @@
                    if (URI != NULL)
                        URL = xmlStrdup(URI);
                }
-               PUSH(XSLT_OP_CHILD, name, URL);
+               PUSH(XSLT_OP_CHILD, name, URL, novar);
            } else if (xmlStrEqual(token, (const xmlChar *) "attribute")) {
                xmlFree(token);
                token = xsltScanName(ctxt);
@@ -1655,7 +1661,7 @@
                    if (URI != NULL)
                        URL = xmlStrdup(URI);
                }
-               PUSH(XSLT_OP_ATTR, name, URL);
+               PUSH(XSLT_OP_ATTR, name, URL, novar);
            } else {
                xsltTransformError(NULL, NULL, NULL,
                    "xsltCompileStepPattern : 'child' or 'attribute' 
expected\n");
@@ -1666,7 +1672,7 @@
        }
     } else if (CUR == '*') {
        NEXT;
-       PUSH(XSLT_OP_ALL, token, NULL);
+       PUSH(XSLT_OP_ALL, token, NULL, novar);
     } else {
        URI = xsltGetQNameURI(ctxt->elem, &token);
        if (token == NULL) {
@@ -1675,7 +1681,7 @@
        }
        if (URI != NULL)
            URL = xmlStrdup(URI);
-       PUSH(XSLT_OP_ELEM, token, URL);
+       PUSH(XSLT_OP_ELEM, token, URL, novar);
     }
 parse_predicate:
     SKIP_BLANKS;
@@ -1713,7 +1719,7 @@
            return;
         }
        ret = xmlStrndup(q, CUR_PTR - q);
-       PUSH(XSLT_OP_PREDICATE, ret, NULL);
+       PUSH(XSLT_OP_PREDICATE, ret, NULL, novar);
        /* push the predicate lower than local test */
        SWAP();
        NEXT;
@@ -1731,6 +1737,7 @@
  * xsltCompileRelativePathPattern:
  * @comp:  the compilation context
  * @token:  a posible precompiled name
+ * @novar:  flag to prohibit xslt variables
  *
  * Compile the XSLT RelativePathPattern and generates a precompiled
  * form suitable for fast matching.
@@ -1740,24 +1747,24 @@
  *                           | RelativePathPattern '//' StepPattern
  */
 static void
-xsltCompileRelativePathPattern(xsltParserContextPtr ctxt, xmlChar *token) {
-    xsltCompileStepPattern(ctxt, token);
+xsltCompileRelativePathPattern(xsltParserContextPtr ctxt, xmlChar *token, int 
novar) {
+    xsltCompileStepPattern(ctxt, token, novar);
     if (ctxt->error)
        goto error;
     SKIP_BLANKS;
     while ((CUR != 0) && (CUR != '|')) {
        if ((CUR == '/') && (NXT(1) == '/')) {
-           PUSH(XSLT_OP_ANCESTOR, NULL, NULL);
+           PUSH(XSLT_OP_ANCESTOR, NULL, NULL, novar);
            NEXT;
            NEXT;
            SKIP_BLANKS;
-           xsltCompileStepPattern(ctxt, NULL);
+           xsltCompileStepPattern(ctxt, NULL, novar);
        } else if (CUR == '/') {
-           PUSH(XSLT_OP_PARENT, NULL, NULL);
+           PUSH(XSLT_OP_PARENT, NULL, NULL, novar);
            NEXT;
            SKIP_BLANKS;
            if ((CUR != 0) && (CUR != '|')) {
-               xsltCompileRelativePathPattern(ctxt, NULL);
+               xsltCompileRelativePathPattern(ctxt, NULL, novar);
            }
        } else {
            ctxt->error = 1;
@@ -1773,6 +1780,7 @@
 /**
  * xsltCompileLocationPathPattern:
  * @ctxt:  the compilation context
+ * @novar:  flag to prohibit xslt variables
  *
  * Compile the XSLT LocationPathPattern and generates a precompiled
  * form suitable for fast matching.
@@ -1782,7 +1790,7 @@
  *                           | '//'? RelativePathPattern
  */
 static void
-xsltCompileLocationPathPattern(xsltParserContextPtr ctxt) {
+xsltCompileLocationPathPattern(xsltParserContextPtr ctxt, int novar) {
     SKIP_BLANKS;
     if ((CUR == '/') && (NXT(1) == '/')) {
        /*
@@ -1792,22 +1800,22 @@
        NEXT;
        NEXT;
        ctxt->comp->priority = 0.5;     /* '//' means not 0 priority */
-       xsltCompileRelativePathPattern(ctxt, NULL);
+       xsltCompileRelativePathPattern(ctxt, NULL, novar);
     } else if (CUR == '/') {
        /*
         * We need to find root as the parent
         */
        NEXT;
        SKIP_BLANKS;
-       PUSH(XSLT_OP_ROOT, NULL, NULL);
+       PUSH(XSLT_OP_ROOT, NULL, NULL, novar);
        if ((CUR != 0) && (CUR != '|')) {
-           PUSH(XSLT_OP_PARENT, NULL, NULL);
-           xsltCompileRelativePathPattern(ctxt, NULL);
+           PUSH(XSLT_OP_PARENT, NULL, NULL, novar);
+           xsltCompileRelativePathPattern(ctxt, NULL, novar);
        }
     } else if (CUR == '*') {
-       xsltCompileRelativePathPattern(ctxt, NULL);
+       xsltCompileRelativePathPattern(ctxt, NULL, novar);
     } else if (CUR == '@') {
-       xsltCompileRelativePathPattern(ctxt, NULL);
+       xsltCompileRelativePathPattern(ctxt, NULL, novar);
     } else {
        xmlChar *name;
        name = xsltScanName(ctxt);
@@ -1819,34 +1827,35 @@
        }
        SKIP_BLANKS;
        if ((CUR == '(') && !xmlXPathIsNodeType(name)) {
-           xsltCompileIdKeyPattern(ctxt, name, 1);
+           xsltCompileIdKeyPattern(ctxt, name, 1, novar);
            if ((CUR == '/') && (NXT(1) == '/')) {
-               PUSH(XSLT_OP_ANCESTOR, NULL, NULL);
+               PUSH(XSLT_OP_ANCESTOR, NULL, NULL, novar);
                NEXT;
                NEXT;
                SKIP_BLANKS;
-               xsltCompileRelativePathPattern(ctxt, NULL);
+               xsltCompileRelativePathPattern(ctxt, NULL, novar);
            } else if (CUR == '/') {
-               PUSH(XSLT_OP_PARENT, NULL, NULL);
+               PUSH(XSLT_OP_PARENT, NULL, NULL, novar);
                NEXT;
                SKIP_BLANKS;
-               xsltCompileRelativePathPattern(ctxt, NULL);
+               xsltCompileRelativePathPattern(ctxt, NULL, novar);
            }
            return;
        }
-       xsltCompileRelativePathPattern(ctxt, name);
+       xsltCompileRelativePathPattern(ctxt, name, novar);
     }
 error:
     return;
 }
 
 /**
- * xsltCompilePattern:
+ * xsltCompilePatternInternal:
  * @pattern: an XSLT pattern
  * @doc:  the containing document
  * @node:  the containing element
  * @style:  the stylesheet
  * @runtime:  the transformation context, if done at run-time
+ * @novar:  flag to prohibit xslt variables
  *
  * Compile the XSLT pattern and generates a list of precompiled form suitable
  * for fast matching.
@@ -1856,10 +1865,10 @@
  * Returns the generated pattern list or NULL in case of failure
  */
 
-xsltCompMatchPtr
-xsltCompilePattern(const xmlChar *pattern, xmlDocPtr doc,
+static xsltCompMatchPtr
+xsltCompilePatternInternal(const xmlChar *pattern, xmlDocPtr doc,
                   xmlNodePtr node, xsltStylesheetPtr style,
-                  xsltTransformContextPtr runtime) {
+                  xsltTransformContextPtr runtime, int novar) {
     xsltParserContextPtr ctxt = NULL;
     xsltCompMatchPtr element, first = NULL, previous = NULL;
     int current, start, end, level, j;
@@ -1938,7 +1947,7 @@
         This may be changed by xsltCompileLocationPathPattern.
         */
        element->priority = 0;
-       xsltCompileLocationPathPattern(ctxt);
+       xsltCompileLocationPathPattern(ctxt, novar);
        if (ctxt->error) {
            xsltTransformError(NULL, style, node,
                             "xsltCompilePattern : failed to compile '%s'\n",
@@ -2013,6 +2022,29 @@
     return(NULL);
 }
 
+/**
+ * xsltCompilePattern:
+ * @pattern: an XSLT pattern
+ * @doc:  the containing document
+ * @node:  the containing element
+ * @style:  the stylesheet
+ * @runtime:  the transformation context, if done at run-time
+ *
+ * Compile the XSLT pattern and generates a list of precompiled form suitable
+ * for fast matching.
+ *
+ * [1] Pattern ::= LocationPathPattern | Pattern '|' LocationPathPattern
+ *
+ * Returns the generated pattern list or NULL in case of failure
+ */
+
+xsltCompMatchPtr
+xsltCompilePattern(const xmlChar *pattern, xmlDocPtr doc,
+                  xmlNodePtr node, xsltStylesheetPtr style,
+                  xsltTransformContextPtr runtime) {
+    return (xsltCompilePatternInternal(pattern, doc, node, style, runtime, 0));
+}
+
 /************************************************************************
  *                                                                     *
  *                     Module interfaces                               *
@@ -2041,7 +2073,8 @@
        return(-1);
 
     priority = cur->priority;
-    pat = xsltCompilePattern(cur->match, style->doc, cur->elem, style, NULL);
+    pat = xsltCompilePatternInternal(cur->match, style->doc, cur->elem,
+                   style, NULL, 1);
     while (pat) {
        next = pat->next;
        pat->next = NULL;

Index: libxslt.info
===================================================================
RCS file: 
/cvsroot/fink/dists/10.4-transitional/unstable/main/finkinfo/libs/libxslt.info,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- libxslt.info        26 Oct 2005 21:52:43 -0000      1.7
+++ libxslt.info        1 Dec 2005 22:02:16 -0000       1.8
@@ -1,6 +1,6 @@
 Package: libxslt
 Version: 1.1.15
-Revision: 1
+Revision: 2
 BuildDependsOnly: true
 Maintainer: The Gnome Core Team <[EMAIL PROTECTED]>
 BuildDepends: gdbm3, libxml2 (>= 2.6.21-1), libiconv-dev
@@ -8,6 +8,7 @@
 Source: mirror:gnome:sources/%n/1.1/%n-%v.tar.bz2
 Source-MD5: 0a48d1a723d5338b246702ab1769e7bf
 PatchScript: perl -pi -e 's,/etc,%p/etc,g' doc/*.html doc/*.1 
xsltproc/xsltproc.c
+Patch: %n.patch
 SetLDFLAGS: -no-undefined
 ConfigureParams: --mandir=%p/share/man --without-python --without-crypto 
--disable-dependency-tracking
 InstallScript: <<
@@ -46,5 +47,9 @@
   pkgs that depended on %N because they need xsltproc don't have to be
   changed.
 <<
+DescPort: <<
+ Patching pattern.c to avoid fop bus error when processing docbook 
+ files. See bugzilla <http://bugzilla.gnome.org/show_bug.cgi?id=316861>
+<<
 License: GPL/LGPL
 Homepage: http://www.xmlsoft.org/XSLT/



-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
_______________________________________________
Fink-commits mailing list
Fink-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/fink-commits

Reply via email to