Reviewed by John.
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 11 Dec 2003 23:50:09 +0000 (23:50 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 11 Dec 2003 23:50:09 +0000 (23:50 +0000)
<rdar://problem/3507862>: XMLHttpRequest documents that reference external resources (e.g. stylesheets) cause crash

        * khtml/html/html_headimpl.cpp:
        (HTMLLinkElementImpl::process):
        * khtml/html/htmltokenizer.cpp:
        (HTMLTokenizer::scriptHandler):
        * khtml/xml/dom_xmlimpl.cpp:
        (ProcessingInstructionImpl::checkStyleSheet):
        * khtml/xml/xml_tokenizer.cpp:
        (XMLHandler::processingInstruction):
        (XMLTokenizer::executeScripts):

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/html/html_headimpl.cpp
WebCore/khtml/html/htmltokenizer.cpp
WebCore/khtml/xml/dom_xmlimpl.cpp
WebCore/khtml/xml/xml_tokenizer.cpp

index b80379e..3f1bd6d 100644 (file)
@@ -1,5 +1,21 @@
 2003-12-11  Maciej Stachowiak  <mjs@apple.com>
 
+        Reviewed by John.
+
+       <rdar://problem/3507862>: XMLHttpRequest documents that reference external resources (e.g. stylesheets) cause crash
+
+        * khtml/html/html_headimpl.cpp:
+        (HTMLLinkElementImpl::process):
+        * khtml/html/htmltokenizer.cpp:
+        (HTMLTokenizer::scriptHandler):
+        * khtml/xml/dom_xmlimpl.cpp:
+        (ProcessingInstructionImpl::checkStyleSheet):
+        * khtml/xml/xml_tokenizer.cpp:
+        (XMLHandler::processingInstruction):
+        (XMLTokenizer::executeScripts):
+
+2003-12-11  Maciej Stachowiak  <mjs@apple.com>
+
         Reviewed by Chris.
 
        <rdar://problem/3507859>: Status text should only include "OK", not full "HTTP/1.0 200 OK" status line
index e87d107..7009e3f 100644 (file)
@@ -220,9 +220,10 @@ void HTMLLinkElementImpl::process()
 
     // Stylesheet
     // This was buggy and would incorrectly match <link rel="alternate">, which has a different specified meaning. -dwh
-    if(m_disabledState != 2 && (type.contains("text/css") || rel == "stylesheet" || (rel.contains("alternate") && rel.contains("stylesheet")))) {
+    if(m_disabledState != 2 && (type.contains("text/css") || rel == "stylesheet" || (rel.contains("alternate") && rel.contains("stylesheet"))) && getDocument()->part()) {
         // no need to load style sheets which aren't for the screen output
         // ### there may be in some situations e.g. for an editor or script to manipulate
+       // also, don't load style sheets for standalone documents
         if( m_media.isNull() || m_media.contains("screen") || m_media.contains("all") || m_media.contains("print") ) {
             m_loading = true;
 
index 7ce3c98..9c222d4 100644 (file)
@@ -466,7 +466,8 @@ void HTMLTokenizer::scriptHandler()
     // We are inside a <script>
     bool doScriptExec = false;
     CachedScript* cs = 0;
-    if (!scriptSrc.isEmpty()) {
+    // don't load external scripts for standalone documents (for now)
+    if (!scriptSrc.isEmpty() && parser->doc()->part()) {
         // forget what we just got; load from src url instead
         if ( !parser->skipMode() ) {
             if ( (cs = parser->doc()->docLoader()->requestScript(scriptSrc, scriptSrcCharset) ))
index ab87cec..44e8a9e 100644 (file)
@@ -420,12 +420,14 @@ void ProcessingInstructionImpl::checkStyleSheet()
             {
                 // ### some validation on the URL?
                 // ### FIXME charset
-                m_loading = true;
-                getDocument()->addPendingSheet();
-                if (m_cachedSheet) m_cachedSheet->deref(this);
-                m_cachedSheet = getDocument()->docLoader()->requestStyleSheet(getDocument()->completeURL(href.string()), QString::null);
-                if (m_cachedSheet)
-                    m_cachedSheet->ref( this );
+               if (getDocument()->part()) {
+                   m_loading = true;
+                   getDocument()->addPendingSheet();
+                   if (m_cachedSheet) m_cachedSheet->deref(this);
+                   m_cachedSheet = getDocument()->docLoader()->requestStyleSheet(getDocument()->completeURL(href.string()), QString::null);
+                   if (m_cachedSheet)
+                       m_cachedSheet->ref( this );
+               }
             }
 
         }
index 7abc4ec..29a3e11 100644 (file)
@@ -201,7 +201,10 @@ bool XMLHandler::processingInstruction(const QString &target, const QString &dat
     // ### handle exceptions
     ProcessingInstructionImpl *pi = m_doc->document()->createProcessingInstruction(target,data);
     m_currentNode->addChild(pi);
-    pi->checkStyleSheet();
+    // don't load stylesheets for standalone documents
+    if (m_doc->document()->part()) {
+       pi->checkStyleSheet();
+    }
     return true;
 }
 
@@ -459,7 +462,8 @@ void XMLTokenizer::executeScripts()
         DOMString scriptSrc = m_scriptsIt->current()->getAttribute(ATTR_SRC);
         QString charset = m_scriptsIt->current()->getAttribute(ATTR_CHARSET).string();
 
-        if (scriptSrc != "") {
+       // don't load external scripts for standalone documents (for now)
+        if (scriptSrc != "" && m_doc->document()->part()) {
             // we have a src attribute
             m_cachedScript = m_doc->document()->docLoader()->requestScript(scriptSrc, charset);
             ++(*m_scriptsIt);