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