| Index: Source/core/xml/parser/XMLDocumentParser.cpp
|
| diff --git a/Source/core/xml/parser/XMLDocumentParser.cpp b/Source/core/xml/parser/XMLDocumentParser.cpp
|
| index 4e2ffddaa1c4525b920a8d2eba36ccb38dec691e..721958fcde5257fb88d77b354ac8a0b3beb4d220 100644
|
| --- a/Source/core/xml/parser/XMLDocumentParser.cpp
|
| +++ b/Source/core/xml/parser/XMLDocumentParser.cpp
|
| @@ -1161,8 +1161,14 @@ void XMLDocumentParser::processingInstruction(const String& target, const String
|
| return;
|
|
|
| m_sawXSLTransform = !m_sawFirstElement && pi->isXSL();
|
| - if (m_sawXSLTransform && !document()->transformSourceDocument())
|
| + if (m_sawXSLTransform && !document()->transformSourceDocument()) {
|
| + // This behavior is very tricky. We call stopParsing() here because we want to stop processing the document
|
| + // until we're ready to apply the transform, but we actually still want to be fed decoded string pieces to
|
| + // accumulate in m_originalSourceForTransform. So, we call stopParsing() here and
|
| + // check isStopped() in element callbacks.
|
| + // FIXME: This contradicts the contract of DocumentParser.
|
| stopParsing();
|
| + }
|
| }
|
|
|
| void XMLDocumentParser::cdataBlock(const String& text)
|
|
|