Fix for bug 453441 (Parsing an XSLT stylesheet with two xsl:version attributes fails). r/sr=sicking.
authorPeter Van der Beken <peterv@propagandism.org>
Wed, 14 Jan 2009 13:24:09 +0100
changeset 23649 98806c8d1c03f86d5a71f9f1b32025f985f85d7c
parent 23648 19e319a0647b8b7ce10de15c0b642d6af75fedc9
child 23650 7b6d9acfc4a446e442a953ce74a05c078b464b3e
push id4661
push userpvanderbeken@mozilla.com
push dateWed, 14 Jan 2009 12:24:23 +0000
treeherdermozilla-central@9fd8740decb8 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs453441
milestone1.9.2a1pre
Fix for bug 453441 (Parsing an XSLT stylesheet with two xsl:version attributes fails). r/sr=sicking.
content/xslt/src/xslt/txStylesheetCompileHandlers.cpp
content/xslt/tests/mochitest/Makefile.in
content/xslt/tests/mochitest/test_bug453441.html
--- a/content/xslt/src/xslt/txStylesheetCompileHandlers.cpp
+++ b/content/xslt/src/xslt/txStylesheetCompileHandlers.cpp
@@ -1312,16 +1312,20 @@ txFnStartLRE(PRInt32 aNamespaceID,
     NS_ENSURE_SUCCESS(rv, rv);
 
     txStylesheetAttr* attr = nsnull;
     PRInt32 i;
     for (i = 0; i < aAttrCount; ++i) {
         attr = aAttributes + i;
         
         if (attr->mNamespaceID == kNameSpaceID_XSLT) {
+            if (attr->mLocalName == txXSLTAtoms::version) {
+                attr->mLocalName = nsnull;
+            }
+
             continue;
         }
 
         nsAutoPtr<Expr> avt;
         rv = txExprParser::createAVT(attr->mValue, &aState,
                                      getter_Transfers(avt));
         NS_ENSURE_SUCCESS(rv, rv);
 
--- a/content/xslt/tests/mochitest/Makefile.in
+++ b/content/xslt/tests/mochitest/Makefile.in
@@ -43,12 +43,13 @@ relativesrcdir  = content/xslt/tests/moc
 
 include $(DEPTH)/config/autoconf.mk
 include $(topsrcdir)/config/rules.mk
 
 _TEST_FILES = 	test_bug319374.xhtml \
 		test_bug440974.html \
 		test_bug427060.html \
 		test_bug468208.html \
+		test_bug453441.html \
 		$(NULL)
 
 libs:: $(_TEST_FILES)
 	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
new file mode 100644
--- /dev/null
+++ b/content/xslt/tests/mochitest/test_bug453441.html
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=453441
+-->
+<head>
+  <title>Test for Bug 453441</title>
+  <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
+  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=453441">Mozilla Bug 453441</a>
+<p id="display"></p>
+<div id="content" style="display: none">
+  
+</div>
+<pre id="test">
+<script class="testbody" type="text/javascript">
+
+/** Test for Bug 453441 **/
+
+function tryImportStylesheet(xml, valid)
+{
+  var processor = new XSLTProcessor;
+
+  var xsltdoc = new DOMParser().parseFromString(String(xml), "text/xml");
+  try
+  {
+    processor.importStylesheet(xsltdoc);
+    ok(valid, "should be able to parse this XSLT stylesheet");
+  }
+  catch (e)
+  {
+    ok(!valid, "should not be able to parse this XSLT stylesheet");
+  }
+}
+
+tryImportStylesheet(
+  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+  <xsl:template match="/">
+    <html xmlns="http://www.w3.org/1999/xhtml" xsl:version="1.0" />
+  </xsl:template>
+  </xsl:stylesheet>
+, true);
+
+tryImportStylesheet(
+  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" />
+, false);
+
+tryImportStylesheet(
+  <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" />
+, false);
+
+</script>
+</pre>
+</body>
+</html>