Title: [88583] trunk
Revision
88583
Author
[email protected]
Date
2011-06-10 17:56:13 -0700 (Fri, 10 Jun 2011)

Log Message

2011-06-10  Adam Barth  <[email protected]>

        Reviewed by Darin Adler.

        Script-created parsers should ignore data from the network
        https://bugs.webkit.org/show_bug.cgi?id=62336

        Triggering this condition is very hard to do deterministically.  This
        test attempts to trigger the condition by sending exactly the right
        number of bytes for the Chromium network stack.  As network stacks vary
        and evolve, it's likely we'll lose test coverage for this issue, but
        this is the best test I could come up with.

        * fast/parser/document-write-ignores-later-network-bytes-expected.txt: Added.
        * fast/parser/document-write-ignores-later-network-bytes.html: Added.
2011-06-10  Adam Barth  <[email protected]>

        Reviewed by Darin Adler.

        Script-created parsers should ignore data from the network
        https://bugs.webkit.org/show_bug.cgi?id=62336

        If the network packet boundaries line up just right, we can end up
        feeding network data to a parser created by document.write (or
        document.open).  That's incorrect.

        This patch causes DocumentWriter to grab hold of the original parser
        and direct all input to that parser.

        Test: fast/parser/document-write-ignores-later-network-bytes.html

        * dom/Document.cpp:
        (WebCore::Document::explicitClose):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        (WebCore::DocumentWriter::addData):
        (WebCore::DocumentWriter::endIfNotLoadingMainResource):
        (WebCore::DocumentWriter::setDocumentWasLoadedAsPartOfNavigation):
        * loader/DocumentWriter.h:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (88582 => 88583)


--- trunk/LayoutTests/ChangeLog	2011-06-11 00:39:10 UTC (rev 88582)
+++ trunk/LayoutTests/ChangeLog	2011-06-11 00:56:13 UTC (rev 88583)
@@ -1,3 +1,19 @@
+2011-06-10  Adam Barth  <[email protected]>
+
+        Reviewed by Darin Adler.
+
+        Script-created parsers should ignore data from the network
+        https://bugs.webkit.org/show_bug.cgi?id=62336
+
+        Triggering this condition is very hard to do deterministically.  This
+        test attempts to trigger the condition by sending exactly the right
+        number of bytes for the Chromium network stack.  As network stacks vary
+        and evolve, it's likely we'll lose test coverage for this issue, but
+        this is the best test I could come up with.
+
+        * fast/parser/document-write-ignores-later-network-bytes-expected.txt: Added.
+        * fast/parser/document-write-ignores-later-network-bytes.html: Added.
+
 2011-06-10  Simon Fraser  <[email protected]>
 
         Reviewed by Dan Bernstein.

Added: trunk/LayoutTests/fast/parser/document-write-ignores-later-network-bytes-expected.txt (0 => 88583)


--- trunk/LayoutTests/fast/parser/document-write-ignores-later-network-bytes-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/parser/document-write-ignores-later-network-bytes-expected.txt	2011-06-11 00:56:13 UTC (rev 88583)
@@ -0,0 +1 @@
+PASS

Added: trunk/LayoutTests/fast/parser/document-write-ignores-later-network-bytes.html (0 => 88583)


--- trunk/LayoutTests/fast/parser/document-write-ignores-later-network-bytes.html	                        (rev 0)
+++ trunk/LayoutTests/fast/parser/document-write-ignores-later-network-bytes.html	2011-06-11 00:56:13 UTC (rev 88583)
@@ -0,0 +1,7 @@
+<script>if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+</script>
+(This test generated a packet boundary by spamming a bunch of garbage characters.  The exact number of garbage characters needed depends on your network stack.  Note: The YZZZZ  below should mark the beginning of a packet boundary.)
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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"/>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+<iframe _onload_="document.close(); document.write('<p>PASS');"></iframe>
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYZZZZZZZZZZZZZZZZZZZZZZZZZZ If this text appears, the test has FAILED!!!

Modified: trunk/Source/WebCore/ChangeLog (88582 => 88583)


--- trunk/Source/WebCore/ChangeLog	2011-06-11 00:39:10 UTC (rev 88582)
+++ trunk/Source/WebCore/ChangeLog	2011-06-11 00:56:13 UTC (rev 88583)
@@ -1,3 +1,28 @@
+2011-06-10  Adam Barth  <[email protected]>
+
+        Reviewed by Darin Adler.
+
+        Script-created parsers should ignore data from the network
+        https://bugs.webkit.org/show_bug.cgi?id=62336
+
+        If the network packet boundaries line up just right, we can end up
+        feeding network data to a parser created by document.write (or
+        document.open).  That's incorrect.
+
+        This patch causes DocumentWriter to grab hold of the original parser
+        and direct all input to that parser.
+
+        Test: fast/parser/document-write-ignores-later-network-bytes.html
+
+        * dom/Document.cpp:
+        (WebCore::Document::explicitClose):
+        * loader/DocumentWriter.cpp:
+        (WebCore::DocumentWriter::begin):
+        (WebCore::DocumentWriter::addData):
+        (WebCore::DocumentWriter::endIfNotLoadingMainResource):
+        (WebCore::DocumentWriter::setDocumentWasLoadedAsPartOfNavigation):
+        * loader/DocumentWriter.h:
+
 2011-06-10  Simon Fraser  <[email protected]>
 
         Reviewed by Dan Bernstein.

Modified: trunk/Source/WebCore/dom/Document.cpp (88582 => 88583)


--- trunk/Source/WebCore/dom/Document.cpp	2011-06-11 00:39:10 UTC (rev 88582)
+++ trunk/Source/WebCore/dom/Document.cpp	2011-06-11 00:56:13 UTC (rev 88583)
@@ -2068,20 +2068,18 @@
 
 void Document::explicitClose()
 {
+    if (m_parser)
+        m_parser->finish();
+
     if (!m_frame) {
         // Because we have no frame, we don't know if all loading has completed,
         // so we just call implicitClose() immediately. FIXME: This might fire
         // the load event prematurely <http://bugs.webkit.org/show_bug.cgi?id=14568>.
-        if (m_parser)
-            m_parser->finish();
         implicitClose();
         return;
     }
 
-    // This code calls implicitClose() if all loading has completed.
-    loader()->writer()->endIfNotLoadingMainResource();
-    if (m_frame)
-        m_frame->loader()->checkCompleted();
+    m_frame->loader()->checkCompleted();
 }
 
 void Document::implicitClose()

Modified: trunk/Source/WebCore/loader/DocumentWriter.cpp (88582 => 88583)


--- trunk/Source/WebCore/loader/DocumentWriter.cpp	2011-06-11 00:39:10 UTC (rev 88582)
+++ trunk/Source/WebCore/loader/DocumentWriter.cpp	2011-06-11 00:56:13 UTC (rev 88583)
@@ -144,6 +144,8 @@
 
     document->implicitOpen();
 
+    m_parser = document->parser();
+
     if (m_frame->view() && m_frame->loader()->client()->hasHTMLView())
         m_frame->view()->setContentsSize(IntSize());
 }
@@ -198,8 +200,7 @@
     if (len == -1)
         len = strlen(str);
 
-    if (DocumentParser* parser = m_frame->document()->parser())
-        parser->appendBytes(this, str, len, flush);
+    m_parser->appendBytes(this, str, len, flush);
 }
 
 void DocumentWriter::end()
@@ -221,8 +222,10 @@
     // FIXME: Can we remove this call? Finishing the parser should flush anyway.
     addData(0, 0, true);
 
-    if (DocumentParser* parser = m_frame->document()->parser())
-        parser->finish();
+    if (!m_parser)
+        return;
+    m_parser->finish();
+    m_parser = 0;
 }
 
 String DocumentWriter::encoding() const
@@ -254,7 +257,8 @@
 
 void DocumentWriter::setDocumentWasLoadedAsPartOfNavigation()
 {
-    m_frame->document()->parser()->setDocumentWasLoadedAsPartOfNavigation();
+    ASSERT(!m_parser->isStopped());
+    m_parser->setDocumentWasLoadedAsPartOfNavigation();
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/loader/DocumentWriter.h (88582 => 88583)


--- trunk/Source/WebCore/loader/DocumentWriter.h	2011-06-11 00:39:10 UTC (rev 88582)
+++ trunk/Source/WebCore/loader/DocumentWriter.h	2011-06-11 00:56:13 UTC (rev 88583)
@@ -35,6 +35,7 @@
 namespace WebCore {
 
 class Document;
+class DocumentParser;
 class Frame;
 class SecurityOrigin;
 class TextResourceDecoder;
@@ -87,6 +88,7 @@
     bool m_encodingWasChosenByUser;
     String m_encoding;
     RefPtr<TextResourceDecoder> m_decoder;
+    RefPtr<DocumentParser> m_parser;
 };
 
 } // namespace WebCore
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to