diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | libxslt/templates.c | 20 | ||||
-rw-r--r-- | tests/docs/Makefile.am | 1 | ||||
-rw-r--r-- | tests/docs/bug-126.xml | 1 | ||||
-rw-r--r-- | tests/general/Makefile.am | 1 | ||||
-rw-r--r-- | tests/general/bug-126.out | 9 | ||||
-rw-r--r-- | tests/general/bug-126.xsl | 17 |
7 files changed, 57 insertions, 0 deletions
@@ -1,3 +1,11 @@ +Sun Aug 3 19:46:42 HTK 2003 William Brack <wbrack@mmm.com.hk> + + Fixed bug 116517 - handling of '{' and '}' + * templates.c: added checks for escaping and balancing of + curly brackets + * tests/general/Makefile.am tests/docs/Makefile.am: + Added test case (bug-126) to regression suite. + Sun Aug 3 15:50:51 HKT 2003 William Brack <wbrack@mmm.com.hk> Fixed bug 117552 - sort with multiple keys diff --git a/libxslt/templates.c b/libxslt/templates.c index 93c0416e..80bd063d 100644 --- a/libxslt/templates.c +++ b/libxslt/templates.c @@ -247,11 +247,20 @@ xsltAttrTemplateValueProcessNode(xsltTransformContextPtr ctxt, cur = str; while (*cur != 0) { if (*cur == '{') { + if (*(cur+1) == '{') { /* escaped '{' */ + cur++; + ret = xmlStrncat(ret, str, cur - str); + cur++; + str = cur; + continue; + } ret = xmlStrncat(ret, str, cur - str); str = cur; cur++; while ((*cur != 0) && (*cur != '}')) cur++; if (*cur == 0) { + xsltTransformError(ctxt, NULL, NULL, + "xsltAttrTemplateValueProcessNode: unmatched '{'\n"); ret = xmlStrncat(ret, str, cur - str); return(ret); } @@ -288,6 +297,17 @@ xsltAttrTemplateValueProcessNode(xsltTransformContextPtr ctxt, } cur++; str = cur; + } else if (*cur == '}') { + cur++; + if (*cur == '}') { /* escaped '}' */ + ret = xmlStrncat(ret, str, cur - str); + cur++; + str = cur; + continue; + } else { + xsltTransformError(ctxt, NULL, NULL, + "xsltAttrTemplateValueProcessNode: unmatched '}'\n"); + } } else cur++; } diff --git a/tests/docs/Makefile.am b/tests/docs/Makefile.am index 9ca0715d..62361d35 100644 --- a/tests/docs/Makefile.am +++ b/tests/docs/Makefile.am @@ -125,6 +125,7 @@ EXTRA_DIST = \ bug-123.xml \ bug-124.xml \ bug-125.xml \ + bug-126.xml \ character.xml \ array.xml \ items.xml diff --git a/tests/docs/bug-126.xml b/tests/docs/bug-126.xml new file mode 100644 index 00000000..69d62f2c --- /dev/null +++ b/tests/docs/bug-126.xml @@ -0,0 +1 @@ +<doc/> diff --git a/tests/general/Makefile.am b/tests/general/Makefile.am index 982faa01..4091d23f 100644 --- a/tests/general/Makefile.am +++ b/tests/general/Makefile.am @@ -130,6 +130,7 @@ EXTRA_DIST = \ bug-123.out bug-123.xsl \ bug-124.out bug-124.xsl \ bug-125.out bug-125.xsl \ + bug-126.out bug-126.xsl \ character.out character.xsl \ character2.out character2.xsl \ itemschoose.out itemschoose.xsl \ diff --git a/tests/general/bug-126.out b/tests/general/bug-126.out new file mode 100644 index 00000000..95ecafdb --- /dev/null +++ b/tests/general/bug-126.out @@ -0,0 +1,9 @@ +<?xml version="1.0"?> + + <foo attr="$x"/> Expect '$x' + <foo attr="val"/> Expect 'val' + <foo attr="{$x"/> Expect 'bracket $x' + <foo attr="$x}"/> Expect '$x bracket' + <foo attr="{$x}"/> Expect 'bracket $x bracket' + <foo attr="{val}"/> Expect 'bracket val bracket' + diff --git a/tests/general/bug-126.xsl b/tests/general/bug-126.xsl new file mode 100644 index 00000000..1fbd4062 --- /dev/null +++ b/tests/general/bug-126.xsl @@ -0,0 +1,17 @@ +<?xml version="1.0"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + version="1.0"> + +<xsl:variable name="x" select="'val'" /> + <xsl:template match="/"> + <xsl:text> + </xsl:text> + <foo attr="$x"/> Expect '$x' + <foo attr="{$x}"/> Expect 'val' + <foo attr="{{$x"/> Expect 'bracket $x' + <foo attr="$x}}"/> Expect '$x bracket' + <foo attr="{{$x}}"/> Expect 'bracket $x bracket' + <foo attr="{{{$x}}}"/> Expect 'bracket val bracket' + </xsl:template> + +</xsl:stylesheet> |