Fixing Bug 116517
authorWilliam M. Brack <wbrack@src.gnome.org>
Sun, 3 Aug 2003 11:48:43 +0000 (11:48 +0000)
committerWilliam M. Brack <wbrack@src.gnome.org>
Sun, 3 Aug 2003 11:48:43 +0000 (11:48 +0000)
ChangeLog
libxslt/templates.c
tests/docs/Makefile.am
tests/docs/bug-126.xml [new file with mode: 0644]
tests/general/Makefile.am
tests/general/bug-126.out [new file with mode: 0644]
tests/general/bug-126.xsl [new file with mode: 0644]

index b24f11e..1680ddc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
index 93c0416..80bd063 100644 (file)
@@ -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++;
     }
index 9ca0715..62361d3 100644 (file)
@@ -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 (file)
index 0000000..69d62f2
--- /dev/null
@@ -0,0 +1 @@
+<doc/>
index 982faa0..4091d23 100644 (file)
@@ -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 (file)
index 0000000..95ecafd
--- /dev/null
@@ -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 (file)
index 0000000..1fbd406
--- /dev/null
@@ -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>