summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeonardo Boshell <leonardop@gentoo.org>2006-03-31 00:43:32 +0000
committerLeonardo Boshell <leonardop@gentoo.org>2006-03-31 00:43:32 +0000
commitc874170e04444efffcbf9cc11f0213f3f961b7ce (patch)
tree10fcc1ffef65ab718c71c9794fca48d6b50e98b5 /dev-libs/libxslt
parentAdd ~x86-fbsd keyword. (diff)
downloadhistorical-c874170e04444efffcbf9cc11f0213f3f961b7ce.tar.gz
historical-c874170e04444efffcbf9cc11f0213f3f961b7ce.tar.bz2
historical-c874170e04444efffcbf9cc11f0213f3f961b7ce.zip
Added patch to fix a segfault under certain scenarios (bug #106992). Dropped static USE flag.
Package-Manager: portage-2.1_pre7-r2
Diffstat (limited to 'dev-libs/libxslt')
-rw-r--r--dev-libs/libxslt/ChangeLog11
-rw-r--r--dev-libs/libxslt/Manifest25
-rw-r--r--dev-libs/libxslt/files/digest-libxslt-1.1.15-r13
-rw-r--r--dev-libs/libxslt/files/libxslt-1.1.15-pattern_fix.patch448
-rw-r--r--dev-libs/libxslt/libxslt-1.1.15-r1.ebuild65
5 files changed, 537 insertions, 15 deletions
diff --git a/dev-libs/libxslt/ChangeLog b/dev-libs/libxslt/ChangeLog
index b22fe6bd6561..45ba7d1a6480 100644
--- a/dev-libs/libxslt/ChangeLog
+++ b/dev-libs/libxslt/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for dev-libs/libxslt
-# Copyright 2002-2005 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/dev-libs/libxslt/ChangeLog,v 1.129 2005/11/11 23:00:50 hansmi Exp $
+# Copyright 2002-2006 Gentoo Foundation; Distributed under the GPL v2
+# $Header: /var/cvsroot/gentoo-x86/dev-libs/libxslt/ChangeLog,v 1.130 2006/03/31 00:43:32 leonardop Exp $
+
+*libxslt-1.1.15-r1 (31 Mar 2006)
+
+ 31 Mar 2006; Leonardo Boshell <leonardop@gentoo.org>
+ +files/libxslt-1.1.15-pattern_fix.patch, +libxslt-1.1.15-r1.ebuild:
+ Patch to fix a segfault with certain xpath statements (bug #106992). Dropped
+ 'static' USE flag.
11 Nov 2005; Michael Hanselmann <hansmi@gentoo.org> libxslt-1.1.15.ebuild:
Stable on ppc.
diff --git a/dev-libs/libxslt/Manifest b/dev-libs/libxslt/Manifest
index 239af4156d72..b69ae9582e98 100644
--- a/dev-libs/libxslt/Manifest
+++ b/dev-libs/libxslt/Manifest
@@ -1,25 +1,24 @@
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-MD5 d2ca9bb53b30ab4b26a5aff19f86e51f ChangeLog 15270
-RMD160 99c5722fb02649340bdcbc3a180b9d8ed548908a ChangeLog 15270
-SHA256 f05004de4712edbd25bf4aba3488b7201925e394ff098b7d8ffc070fb67dce92 ChangeLog 15270
+MD5 a4b1aa97776be627485c06b05f15c517 ChangeLog 15533
+RMD160 d184020cbd12fdedda9026042fb24de3cfca5baf ChangeLog 15533
+SHA256 d987aeb35059ab748ba2ea83a41176a121b3a067bd3811fd368bee5992c283f5 ChangeLog 15533
MD5 3f759d81e688060d55a76a9529dd41d7 files/digest-libxslt-1.1.15 68
RMD160 baf1fde40f27ae6debf5a8475d5b8da0e33a8030 files/digest-libxslt-1.1.15 68
SHA256 5044e560aeaef16387ac3d2fbb845893aca87dd3a7e949f07f2bcc98ad9f62af files/digest-libxslt-1.1.15 68
+MD5 661100efff83221b769292fe6f0d1993 files/digest-libxslt-1.1.15-r1 250
+RMD160 86372706ddc840f50a50991809737ba45b7a75d0 files/digest-libxslt-1.1.15-r1 250
+SHA256 588cf2cdf41c649d628086f6117addb677cd24842336430485663ed1039f2b27 files/digest-libxslt-1.1.15-r1 250
+MD5 684db3ea80f64024cc1d2c3466790f04 files/libxslt-1.1.15-pattern_fix.patch 13404
+RMD160 390c01b4988c1df5d9f6d2b77fb7d47dc18cca89 files/libxslt-1.1.15-pattern_fix.patch 13404
+SHA256 34c13e32ca69eb5c55669d23e07710f56ec1c275fd78fa8ad2d36cc7f413a0a7 files/libxslt-1.1.15-pattern_fix.patch 13404
MD5 a772cd7aafe8f9e0fd59de02b2ea2e85 files/libxslt.m4-libxslt-1.1.8.patch 1292
RMD160 0dcd21978aa0102784df670f2c9835da227f42c8 files/libxslt.m4-libxslt-1.1.8.patch 1292
SHA256 0da59fb6cb50bf30e8ac79644df90394707ac07e60337aa3c0e53986781e9e0d files/libxslt.m4-libxslt-1.1.8.patch 1292
+MD5 636d561d6a3cab54c7f83792eec51db1 libxslt-1.1.15-r1.ebuild 1873
+RMD160 a813581892c1604a1a958c2e1eaf9004e3c025eb libxslt-1.1.15-r1.ebuild 1873
+SHA256 14b411ca306be6a15642bfa165a6334bd754a0f51e3a9763af90b15a1b40e95a libxslt-1.1.15-r1.ebuild 1873
MD5 8d0a9caf015cb42e81bb61f26389f555 libxslt-1.1.15.ebuild 1749
RMD160 8ad9e5bdf8f483eecf86176067cf1da8cafc0ded libxslt-1.1.15.ebuild 1749
SHA256 42c7dc5790bd7ba32741cd2b810c0b00d8d1b2ddf80fa0fa34d1bcb83f067931 libxslt-1.1.15.ebuild 1749
MD5 03ad2e6c4ab41244af1015a8bbb0b39f metadata.xml 158
RMD160 c0e2bae8e91bb6be8922bac5e4f597302e06587e metadata.xml 158
SHA256 3a7dbca0fdc557de69783e0663e2d76ddab129ea8a19b2d0ef6d3e5d1b947ce1 metadata.xml 158
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.2.2 (GNU/Linux)
-
-iD8DBQFEH2qg2+ySkm8kpY0RAt53AJ9JJSUyG94WwIgzaeQFH5ASYgCzNQCcDDtk
-h3P/knbpVR2LyYykxBVbauY=
-=GybH
------END PGP SIGNATURE-----
diff --git a/dev-libs/libxslt/files/digest-libxslt-1.1.15-r1 b/dev-libs/libxslt/files/digest-libxslt-1.1.15-r1
new file mode 100644
index 000000000000..ed0997e82420
--- /dev/null
+++ b/dev-libs/libxslt/files/digest-libxslt-1.1.15-r1
@@ -0,0 +1,3 @@
+MD5 0a48d1a723d5338b246702ab1769e7bf libxslt-1.1.15.tar.bz2 1822862
+RMD160 8a560fdc635a2ab8d74ba95f9a98236a52204573 libxslt-1.1.15.tar.bz2 1822862
+SHA256 6322124f471d6ed4908833cddaba512b247aa169cb8d1ebd87219afe051c6e03 libxslt-1.1.15.tar.bz2 1822862
diff --git a/dev-libs/libxslt/files/libxslt-1.1.15-pattern_fix.patch b/dev-libs/libxslt/files/libxslt-1.1.15-pattern_fix.patch
new file mode 100644
index 000000000000..ed1433ce0d34
--- /dev/null
+++ b/dev-libs/libxslt/files/libxslt-1.1.15-pattern_fix.patch
@@ -0,0 +1,448 @@
+diff -NurdB libxslt-1.1.15/libxslt/pattern.c libxslt-1.1.15-patched/libxslt/pattern.c
+--- libxslt-1.1.15/libxslt/pattern.c 2005-09-04 17:41:43.000000000 -0500
++++ libxslt-1.1.15-patched/libxslt/pattern.c 2006-03-30 19:23:03.000000000 -0500
+@@ -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;
diff --git a/dev-libs/libxslt/libxslt-1.1.15-r1.ebuild b/dev-libs/libxslt/libxslt-1.1.15-r1.ebuild
new file mode 100644
index 000000000000..c9439cb1492f
--- /dev/null
+++ b/dev-libs/libxslt/libxslt-1.1.15-r1.ebuild
@@ -0,0 +1,65 @@
+# Copyright 1999-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-libs/libxslt/libxslt-1.1.15-r1.ebuild,v 1.1 2006/03/31 00:43:32 leonardop Exp $
+
+inherit libtool gnome.org eutils python
+
+DESCRIPTION="XSLT libraries and tools"
+HOMEPAGE="http://www.xmlsoft.org/"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86"
+IUSE="crypt debug python"
+
+DEPEND=">=dev-libs/libxml2-2.6.17
+ crypt? ( >=dev-libs/libgcrypt-1.1.92 )
+ python? ( dev-lang/python )"
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+
+ # we still require the 1.1.8 patch for the .m4 file, to add
+ # the CXXFLAGS defines <obz@gentoo.org>
+ epatch "${FILESDIR}"/libxslt.m4-${PN}-1.1.8.patch
+
+ # Patch from CVS to fix segfault when processing certain xpath statements
+ # (bug #106992)
+ epatch "${FILESDIR}"/${P}-pattern_fix.patch
+
+ # Patch Makefile to fix bug #99382 so that html gets installed in ${PF}
+ sed -i -e 's:libxslt-$(VERSION):${PF}:' doc/Makefile.in
+
+ epunt_cxx
+ elibtoolize
+}
+
+src_compile() {
+ # Always pass --with-debugger. It is required by third parties (see
+ # e.g. bug #98345)
+ local myconf="--with-debugger \
+ $(use_with python) \
+ $(use_with crypt crypto) \
+ $(use_with debug) \
+ $(use_with debug mem-debug)"
+
+ econf ${myconf} || die "configure failed"
+
+ # Patching the Makefiles to respect get_libdir
+ # Fixes BUG #86756, please keep this.
+ # Danny van Dyk <kugelfang@gentoo.org> 2005/03/26
+ for x in $(find "${S}" -name "Makefile") ; do
+ sed \
+ -e "s|^\(PYTHON_SITE_PACKAGES\ =\ \/usr\/\).*\(\/python.*\)|\1$(get_libdir)\2|g" \
+ -i ${x} \
+ || die "sed failed"
+ done
+
+ emake || die "Compilation failed"
+}
+
+src_install() {
+ make DESTDIR="${D}" install || die "Installation failed"
+ dodoc AUTHORS ChangeLog FEATURES NEWS README TODO
+}