2010-09-04 Justin Schuh <jschuh@chromium.org>
authorjschuh@chromium.org <jschuh@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 4 Sep 2010 15:45:47 +0000 (15:45 +0000)
committerjschuh@chromium.org <jschuh@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 4 Sep 2010 15:45:47 +0000 (15:45 +0000)
        Reviewed by Nikolas Zimmermann.

        Prevent premature deletion of svg use shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=43260

        Test: svg/custom/use-invalid-style.svg

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedIntoDocument):
        (WebCore::SVGUseElement::removedFromDocument):
        (WebCore::SVGUseElement::detach):
2010-09-04  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Check for premature deletion of svg use shadow style element
        https://bugs.webkit.org/show_bug.cgi?id=43260

        * svg/custom/use-invalid-style-expected.txt: Added.
        * svg/custom/use-invalid-style.svg: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@66795 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/svg/custom/use-invalid-style-expected.txt [new file with mode: 0644]
LayoutTests/svg/custom/use-invalid-style.svg [new file with mode: 0644]
WebCore/ChangeLog
WebCore/svg/SVGUseElement.cpp

index 9594b6f..a2ec56f 100644 (file)
@@ -1,3 +1,13 @@
+2010-09-04  Justin Schuh  <jschuh@chromium.org>
+
+        Reviewed by Nikolas Zimmermann.
+
+        Check for premature deletion of svg use shadow style element
+        https://bugs.webkit.org/show_bug.cgi?id=43260
+
+        * svg/custom/use-invalid-style-expected.txt: Added.
+        * svg/custom/use-invalid-style.svg: Added.
+
 2010-09-04  Steve Block  <steveblock@google.com>
 
         Unreviewed.
diff --git a/LayoutTests/svg/custom/use-invalid-style-expected.txt b/LayoutTests/svg/custom/use-invalid-style-expected.txt
new file mode 100644 (file)
index 0000000..b9737b1
--- /dev/null
@@ -0,0 +1,7 @@
+This page contains the following errors:
+
+error on line 10 at column 88: Opening and ending tag mismatch: junk line 0 and svg
+Below is a rendering of the page up to the first error.
+
+This should not crash, but display an error document.
+
diff --git a/LayoutTests/svg/custom/use-invalid-style.svg b/LayoutTests/svg/custom/use-invalid-style.svg
new file mode 100644 (file)
index 0000000..d873428
--- /dev/null
@@ -0,0 +1,10 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\r
+    <script>\r
+        if (window.layoutTestController)\r
+            layoutTestController.dumpAsText();\r
+    </script>\r
+    <text y="20">This should not crash, but display an error document.</text>\r
+    <style id="crash"></style>\r
+    <use xlink:href="#crash" />\r
+    <junk>\r
+</svg>\r
index 1e7775f..52c6755 100644 (file)
@@ -1,3 +1,17 @@
+2010-09-04  Justin Schuh  <jschuh@chromium.org>
+
+        Reviewed by Nikolas Zimmermann.
+
+        Prevent premature deletion of svg use shadow tree
+        https://bugs.webkit.org/show_bug.cgi?id=43260
+
+        Test: svg/custom/use-invalid-style.svg
+
+        * svg/SVGUseElement.cpp:
+        (WebCore::SVGUseElement::insertedIntoDocument):
+        (WebCore::SVGUseElement::removedFromDocument):
+        (WebCore::SVGUseElement::detach):
+
 2010-09-03  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>
 
         Reviewed by Darin Adler.
index fc6c9fc..3723f9a 100644 (file)
@@ -44,6 +44,7 @@
 #include "SVGShadowTreeElements.h"
 #include "SVGSymbolElement.h"
 #include "XLinkNames.h"
+#include "XMLDocumentParser.h"
 #include "XMLSerializer.h"
 
 // Dump SVGElementInstance object tree - useful to debug instanceRoot problems
@@ -120,14 +121,14 @@ void SVGUseElement::insertedIntoDocument()
 {
     // This functions exists to assure assumptions made in the code regarding SVGElementInstance creation/destruction are satisfied.
     SVGStyledTransformableElement::insertedIntoDocument();
-    ASSERT(!m_targetElementInstance);
+    ASSERT(!m_targetElementInstance || ((document()->isSVGDocument() || document()->isXHTMLDocument()) && !static_cast<XMLDocumentParser*>(document()->parser())->wellFormed()));
     ASSERT(!m_isPendingResource);
 }
 
 void SVGUseElement::removedFromDocument()
 {
-    m_targetElementInstance = 0;
     SVGStyledTransformableElement::removedFromDocument();
+    m_targetElementInstance = 0;
 }
 
 void SVGUseElement::svgAttributeChanged(const QualifiedName& attrName)
@@ -608,8 +609,8 @@ void SVGUseElement::attach()
 
 void SVGUseElement::detach()
 {
-    m_targetElementInstance = 0;
     SVGStyledTransformableElement::detach();
+    m_targetElementInstance = 0;
 }
 
 static bool isDirectReference(Node* n)