From 15828d4cde05a61835f0d9306e0d35769489bdc4 Mon Sep 17 00:00:00 2001 From: "William M. Brack" Date: Mon, 22 Nov 2004 00:11:24 +0000 Subject: [PATCH] small change to previous fix for bug 153137, fixes bug 158840. added test * libxslt/pattern.c: small change to previous fix for bug 153137, fixes bug 158840. * tests/general/bug-157.*, tests/general/Makefile.am, tests/docs/bug-157.*, tests/docs/Makefile.am: added test for this --- ChangeLog | 7 +++++++ libxslt/pattern.c | 18 ++++++++++-------- tests/docs/Makefile.am | 1 + tests/docs/bug-157.xml | 6 ++++++ tests/general/Makefile.am | 1 + tests/general/bug-157.err | 3 +++ tests/general/bug-157.out | 9 +++++++++ tests/general/bug-157.xsl | 22 ++++++++++++++++++++++ 8 files changed, 59 insertions(+), 8 deletions(-) create mode 100644 tests/docs/bug-157.xml create mode 100644 tests/general/bug-157.err create mode 100644 tests/general/bug-157.out create mode 100644 tests/general/bug-157.xsl diff --git a/ChangeLog b/ChangeLog index 7368c0e..589d941 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Mon Nov 22 08:10:18 HKT 2004 William Brack + + * libxslt/pattern.c: small change to previous fix for bug 153137, + fixes bug 158840. + * tests/general/bug-157.*, tests/general/Makefile.am, + tests/docs/bug-157.*, tests/docs/Makefile.am: added test for this + Sun Nov 21 09:42:22 HKT 2004 William Brack * libxslt/transform.c: enhanced code to assure the "current diff --git a/libxslt/pattern.c b/libxslt/pattern.c index b986e9e..7760518 100644 --- a/libxslt/pattern.c +++ b/libxslt/pattern.c @@ -767,18 +767,20 @@ xsltTestCompMatch(xsltTransformContextPtr ctxt, xsltCompMatchPtr comp, if (sibling != NULL) { pos = ix + indx; /* - * If the node is in a Value Tree we cannot - * cache it ! + * If the node is in a Value Tree we need to + * save len, but cannot cache the node! + * (bugs 153137 and 158840) */ - if ((node->doc != NULL) && - (node->doc->name != NULL) && - (node->doc->name[0] != ' ')) { + if (node->doc != NULL) { len = (int) XSLT_RUNTIME_EXTRA(ctxt, sel->lenExtra); - XSLT_RUNTIME_EXTRA(ctxt, + if ((node->doc->name != NULL) && + (node->doc->name[0] != ' ')) { + XSLT_RUNTIME_EXTRA(ctxt, sel->previousExtra) = node; - XSLT_RUNTIME_EXTRA(ctxt, sel->indexExtra) = - (void *) pos; + XSLT_RUNTIME_EXTRA(ctxt, sel->indexExtra) = + (void *) pos; + } } ix = pos; } else diff --git a/tests/docs/Makefile.am b/tests/docs/Makefile.am index fd944df..cc00c88 100644 --- a/tests/docs/Makefile.am +++ b/tests/docs/Makefile.am @@ -156,6 +156,7 @@ EXTRA_DIST = \ bug-154.xml \ bug-155.xml \ bug-156.xml \ + bug-157.xml \ character.xml \ array.xml \ items.xml diff --git a/tests/docs/bug-157.xml b/tests/docs/bug-157.xml new file mode 100644 index 0000000..14cac78 --- /dev/null +++ b/tests/docs/bug-157.xml @@ -0,0 +1,6 @@ + + + me + you + others + diff --git a/tests/general/Makefile.am b/tests/general/Makefile.am index afd0320..98059ca 100644 --- a/tests/general/Makefile.am +++ b/tests/general/Makefile.am @@ -165,6 +165,7 @@ EXTRA_DIST = \ bug-155.out bug-155.xsl \ bug-156.err bug-156.out bug-156.xsl \ bug-156.imp1.imp bug-156.imp2.imp \ + bug-157.err bug-157.out bug-157.xsl \ character.out character.xsl \ character2.out character2.xsl \ itemschoose.out itemschoose.xsl \ diff --git a/tests/general/bug-157.err b/tests/general/bug-157.err new file mode 100644 index 0000000..c0329a8 --- /dev/null +++ b/tests/general/bug-157.err @@ -0,0 +1,3 @@ +last() was 3 +last() was 3 +last() was 3 diff --git a/tests/general/bug-157.out b/tests/general/bug-157.out new file mode 100644 index 0000000..a5db75f --- /dev/null +++ b/tests/general/bug-157.out @@ -0,0 +1,9 @@ + + + + 3 me + + 3 you + + 3 others + diff --git a/tests/general/bug-157.xsl b/tests/general/bug-157.xsl new file mode 100644 index 0000000..349fc8e --- /dev/null +++ b/tests/general/bug-157.xsl @@ -0,0 +1,22 @@ + + + + + + 4 + + + last() was 3 + 3 + + + 2 + + + 1 + + + + last() was + + -- 2.7.4