- 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