fix for <rdar://problem/4110775> Crash will occur when double-clicking outerH...
authoradele <adele@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 10 May 2005 01:04:52 +0000 (01:04 +0000)
committeradele <adele@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 10 May 2005 01:04:52 +0000 (01:04 +0000)
        Reviewed by Darin.

        * khtml/html/html_elementimpl.cpp: (HTMLElementImpl::setOuterHTML): added nil check.
        This was causing a crash when you tried to set the outerHTML on an element that was no longer in the DOM tree.

        * layout-tests/fast/dom/outerText-no-element.html: Added. Tests case where you try to set outerText on an element no longer in the DOM tree.
        * layout-tests/fast/dom/outerText-no-element-expected.txt: Added.
        * layout-tests/fast/dynamic/outerHTML-doc.html: Added.  Tests case where someone tries to set outerHTML on the document.
        * layout-tests/fast/dynamic/outerHTML-doc-expected.txt: Added..
        * layout-tests/fast/dynamic/outerHTML-no-element.html: Added. Tests case where you try to set outerHTML on an element no longer in the DOM tree.
        * layout-tests/fast/dynamic/outerHTML-no-element-expected.txt: Added.
        * layout-tests/fast/dynamic/outerHTML-img.html: moved images to resources directory
        * layout-tests/fast/dynamic/resources/apple.gif: Added.
        * layout-tests/fast/dynamic/resources/mozilla.gif: Added.

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

LayoutTests/fast/dom/outerText-no-element-expected.txt [new file with mode: 0644]
LayoutTests/fast/dom/outerText-no-element.html [new file with mode: 0644]
LayoutTests/fast/dynamic/outerHTML-doc-expected.txt [new file with mode: 0644]
LayoutTests/fast/dynamic/outerHTML-doc.html [new file with mode: 0644]
LayoutTests/fast/dynamic/outerHTML-img.html
LayoutTests/fast/dynamic/outerHTML-no-element-expected.txt [new file with mode: 0644]
LayoutTests/fast/dynamic/outerHTML-no-element.html [new file with mode: 0644]
LayoutTests/fast/dynamic/resources/apple.gif [new file with mode: 0644]
LayoutTests/fast/dynamic/resources/mozilla.gif [new file with mode: 0644]
WebCore/ChangeLog-2005-08-23
WebCore/khtml/html/html_elementimpl.cpp

diff --git a/LayoutTests/fast/dom/outerText-no-element-expected.txt b/LayoutTests/fast/dom/outerText-no-element-expected.txt
new file mode 100644 (file)
index 0000000..cee2860
--- /dev/null
@@ -0,0 +1,18 @@
+layer at (0,0) size 800x600
+  RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+      RenderBlock (anonymous) at (0,0) size 784x18
+        RenderText {TEXT} at (0,0) size 122x18
+          text run at (0,0) width 122: "Expected behavior:"
+      RenderBlock {P} at (0,34) size 784x36
+        RenderText {TEXT} at (0,0) size 767x36
+          text run at (0,0) width 767: "This page will try to set the outerText on an element that is no longer in the DOM tree. You should see a description of an"
+          text run at (0,18) width 94: "expected error."
+      RenderBlock {DIV} at (0,86) size 784x18
+        RenderText {TEXT} at (0,0) size 182x18
+          text run at (0,0) width 182: "this is a big test or something"
+      RenderBlock {DIV} at (0,104) size 784x18
+        RenderText {TEXT} at (0,0) size 267x18
+          text run at (0,0) width 267: "Expected error - Error - DOM exception 7"
diff --git a/LayoutTests/fast/dom/outerText-no-element.html b/LayoutTests/fast/dom/outerText-no-element.html
new file mode 100644 (file)
index 0000000..90b78f2
--- /dev/null
@@ -0,0 +1,16 @@
+Expected behavior:  
+<p>This page will try to set the outerText on an element that is no longer in the DOM tree.
+You should see a description of an expected error.
+</p>
+<div id="div">this is a <i id="test">test</i> or something</div>
+
+<script>
+var test = document.getElementById("test");
+test.outerText = "big test";
+try {
+    test.outerText = "mistake";
+}catch (e)
+{
+    document.write("<div> Expected error - " + e + "</div>");
+}
+</script>
diff --git a/LayoutTests/fast/dynamic/outerHTML-doc-expected.txt b/LayoutTests/fast/dynamic/outerHTML-doc-expected.txt
new file mode 100644 (file)
index 0000000..bdca245
--- /dev/null
@@ -0,0 +1,18 @@
+layer at (0,0) size 800x600
+  RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+      RenderBlock {P} at (0,0) size 784x18
+        RenderText {TEXT} at (0,0) size 47x18
+          text run at (0,0) width 47: "test for "
+        RenderInline {A} at (0,0) size 56x18 [color=#0000EE]
+          RenderText {TEXT} at (47,0) size 56x18
+            text run at (47,0) width 56: "4110775"
+        RenderText {TEXT} at (103,0) size 473x18
+          text run at (103,0) width 473: " Crash will occur when double-clicking outerHTML link on W3 DOM test"
+      RenderBlock {P} at (0,34) size 784x0
+      RenderBlock {DIV} at (0,34) size 784x18
+        RenderText {TEXT} at (0,0) size 586x18
+          text run at (0,0) width 456: "This test passed. We don't support outerHTML on the document object. "
+          text run at (456,0) width 130: "Neither does WinIE."
diff --git a/LayoutTests/fast/dynamic/outerHTML-doc.html b/LayoutTests/fast/dynamic/outerHTML-doc.html
new file mode 100644 (file)
index 0000000..1f996bd
--- /dev/null
@@ -0,0 +1,14 @@
+<html>
+<body>
+<p>test for <a href="rdar://problem/4110775">4110775</a> Crash will occur when double-clicking outerHTML link on W3 DOM test</p>
+<p>
+<div id="test">This test passed. We don't support outerHTML on the document object.  Neither does WinIE.</div>
+
+<script type="text/javascript">
+var t = document;
+var outerStr = "<div id='test2'>This test failed.  We don't support outerHTML on the document object.  Neither does WinIE.  Why did this work?</div>";
+t.outerHTML = outerStr;
+</script>
+
+</body>
+</html>
index c0c06a37528ab25218c00fedb4febfbab5ffea33..75debc54121cb825cd2c19592e0bcb30ec2ed1f7 100644 (file)
@@ -2,11 +2,11 @@
 <body>
 <p>test for <a href="rdar://problem/4065447">4065447</a> (support outerHTML on IMG elements)</p>
 <p>If the test fails, you'll see a Mozilla logo; if it succeeds, you'll see an Apple logo.</p>
-<img id="anImage" src="http://images.slashdot.org/topics/topicmozilla.gif">
+<img id="anImage" src="resources/mozilla.gif">
 
 <script type="text/javascript">
 var anImage = document.getElementById("anImage");
-var outerStr = "<img id='anImage' src='http://images.slashdot.org/topics/topicapple.gif'>";
+var outerStr = "<img id='anImage' src='resources/apple.gif'>";
 anImage.outerHTML = outerStr;
 </script>
 
diff --git a/LayoutTests/fast/dynamic/outerHTML-no-element-expected.txt b/LayoutTests/fast/dynamic/outerHTML-no-element-expected.txt
new file mode 100644 (file)
index 0000000..56d4ac0
--- /dev/null
@@ -0,0 +1,21 @@
+layer at (0,0) size 800x600
+  RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+      RenderBlock {P} at (0,0) size 784x18
+        RenderText {TEXT} at (0,0) size 47x18
+          text run at (0,0) width 47: "test for "
+        RenderInline {A} at (0,0) size 56x18 [color=#0000EE]
+          RenderText {TEXT} at (47,0) size 56x18
+            text run at (47,0) width 56: "4110775"
+        RenderText {TEXT} at (103,0) size 473x18
+          text run at (103,0) width 473: " Crash will occur when double-clicking outerHTML link on W3 DOM test"
+      RenderBlock {P} at (0,34) size 784x36
+        RenderText {TEXT} at (0,0) size 783x36
+          text run at (0,0) width 468: "If the test fails, Safari may crash, or you may see a failure message below. "
+          text run at (468,0) width 315: "If the test passes, you should see a message with a"
+          text run at (0,18) width 238: "description of the expected exception."
+      RenderBlock {DIV} at (0,86) size 784x18
+        RenderText {TEXT} at (0,0) size 376x18
+          text run at (0,0) width 376: "This test passed - expected error - Error - DOM exception 7"
diff --git a/LayoutTests/fast/dynamic/outerHTML-no-element.html b/LayoutTests/fast/dynamic/outerHTML-no-element.html
new file mode 100644 (file)
index 0000000..31c4213
--- /dev/null
@@ -0,0 +1,19 @@
+<html>
+<body>
+<p>test for <a href="rdar://problem/4110775">4110775</a> Crash will occur when double-clicking outerHTML link on W3 DOM test</p>
+<p>If the test fails, Safari may crash, or you may see a failure message below.  If the test passes, you should see a message with a description of the expected exception.</p>
+<div id="test">This test failed.</div>
+
+<script type="text/javascript">
+var t = document.getElementById("test");
+var outerStr = "<div id='test2'>This test failed!</div>";
+t.outerHTML = outerStr;
+try {
+    t.outerHTML = "<div id='test2'>This test failed!!</div>"
+}catch(e) {
+    document.getElementById("test2").outerHTML = "<div id='test2'>This test passed - expected error - " + e + "</div>";
+}
+</script>
+
+</body>
+</html>
diff --git a/LayoutTests/fast/dynamic/resources/apple.gif b/LayoutTests/fast/dynamic/resources/apple.gif
new file mode 100644 (file)
index 0000000..55844c8
Binary files /dev/null and b/LayoutTests/fast/dynamic/resources/apple.gif differ
diff --git a/LayoutTests/fast/dynamic/resources/mozilla.gif b/LayoutTests/fast/dynamic/resources/mozilla.gif
new file mode 100644 (file)
index 0000000..509b30e
Binary files /dev/null and b/LayoutTests/fast/dynamic/resources/mozilla.gif differ
index 0d082f64cb6968c6feed834cccaf821b7a4b4a94..9cb61542b3ea97c102ff0c05bf60b9531f2e539f 100644 (file)
@@ -1,3 +1,22 @@
+2005-05-09  Adele Peterson  <adele@apple.com>
+
+        fix for <rdar://problem/4110775> Crash will occur when double-clicking outerHTML link on W3 DOM test
+
+        Reviewed by Darin.
+
+        * khtml/html/html_elementimpl.cpp: (HTMLElementImpl::setOuterHTML): added nil check.  
+        This was causing a crash when you tried to set the outerHTML on an element that was no longer in the DOM tree.
+
+        * layout-tests/fast/dom/outerText-no-element.html: Added. Tests case where you try to set outerText on an element no longer in the DOM tree.
+        * layout-tests/fast/dom/outerText-no-element-expected.txt: Added.
+        * layout-tests/fast/dynamic/outerHTML-doc.html: Added.  Tests case where someone tries to set outerHTML on the document.
+        * layout-tests/fast/dynamic/outerHTML-doc-expected.txt: Added..
+        * layout-tests/fast/dynamic/outerHTML-no-element.html: Added. Tests case where you try to set outerHTML on an element no longer in the DOM tree.
+        * layout-tests/fast/dynamic/outerHTML-no-element-expected.txt: Added.
+        * layout-tests/fast/dynamic/outerHTML-img.html: moved images to resources directory
+        * layout-tests/fast/dynamic/resources/apple.gif: Added.
+        * layout-tests/fast/dynamic/resources/mozilla.gif: Added.
+
 2005-05-09  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Kevin.
index 1e375276ae275ad870d4c0414ad8909f0481bd72..9dd66c7fe0575216b3458fe88f74d2ea54f1b638 100644 (file)
@@ -861,7 +861,7 @@ bool HTMLElementImpl::setInnerHTML( const DOMString &html )
 bool HTMLElementImpl::setOuterHTML( const DOMString &html )
 {
     NodeImpl *p = parent();
-    if (!p->isHTMLElement())
+    if (!p || !p->isHTMLElement())
         return false;
     HTMLElementImpl *parent = static_cast<HTMLElementImpl *>(p);
     DocumentFragmentImpl *fragment = parent->createContextualFragment( html );