From 0d9db05b8302b722ddd2ec9c0769fde3135b033a Mon Sep 17 00:00:00 2001 From: "bzbarsky%mit.edu" Date: Sun, 24 Oct 2004 17:25:58 +0000 Subject: [PATCH] Make XSLT stylesheet loads check content policy. Bug 203211, r=sicking, sr=peterv git-svn-id: svn://10.0.0.236/trunk@164280 18797224-902f-48f8-a5cc-f745e15eee43 --- .../xml/document/src/nsXMLContentSink.cpp | 19 +++++++++++++++++++ .../xslt/txMozillaStylesheetCompiler.cpp | 18 ++++++++++++++++++ .../source/xslt/txMozillaXSLTProcessor.h | 5 +++++ 3 files changed, 42 insertions(+) diff --git a/mozilla/content/xml/document/src/nsXMLContentSink.cpp b/mozilla/content/xml/document/src/nsXMLContentSink.cpp index 0db84c4dba8..70ae1da646c 100644 --- a/mozilla/content/xml/document/src/nsXMLContentSink.cpp +++ b/mozilla/content/xml/document/src/nsXMLContentSink.cpp @@ -96,6 +96,8 @@ #include "nsXMLPrettyPrinter.h" #include "nsNodeInfoManager.h" #include "nsContentCreatorFunctions.h" +#include "nsIContentPolicy.h" +#include "nsContentPolicyUtils.h" #ifdef MOZ_SVG #include "nsSVGAtoms.h" @@ -666,6 +668,7 @@ nsXMLContentSink::ProcessStyleLink(nsIContent* aElement, rv = NS_NewURI(getter_AddRefs(url), aHref, nsnull, mDocumentBaseURI); NS_ENSURE_SUCCESS(rv, rv); + // Do security check nsIScriptSecurityManager *secMan = nsContentUtils::GetSecurityManager(); rv = secMan-> CheckLoadURIWithPrincipal(mDocument->GetPrincipal(), url, @@ -675,6 +678,22 @@ nsXMLContentSink::ProcessStyleLink(nsIContent* aElement, rv = secMan->CheckSameOriginURI(mDocumentURI, url); NS_ENSURE_SUCCESS(rv, NS_OK); + // Do content policy check + PRInt16 decision = nsIContentPolicy::ACCEPT; + rv = NS_CheckContentLoadPolicy(nsIContentPolicy::TYPE_STYLESHEET, + url, + mDocument->GetDocumentURI(), + aElement, + type, + nsnull, + &decision); + + NS_ENSURE_SUCCESS(rv, rv); + + if (NS_CP_REJECTED(decision)) { + return NS_OK; + } + return LoadXSLStyleSheet(url); } diff --git a/mozilla/extensions/transformiix/source/xslt/txMozillaStylesheetCompiler.cpp b/mozilla/extensions/transformiix/source/xslt/txMozillaStylesheetCompiler.cpp index 3d60da9756c..62a5f719937 100644 --- a/mozilla/extensions/transformiix/source/xslt/txMozillaStylesheetCompiler.cpp +++ b/mozilla/extensions/transformiix/source/xslt/txMozillaStylesheetCompiler.cpp @@ -52,6 +52,7 @@ #include "nsIParser.h" #include "nsIRequestObserver.h" #include "nsIScriptSecurityManager.h" +#include "nsContentPolicyUtils.h" #include "nsIStreamConverterService.h" #include "nsISyncLoadDOMService.h" #include "nsIURI.h" @@ -499,6 +500,7 @@ txCompileObserver::startLoad(nsIURI* aUri, txStylesheetCompiler* aCompiler, nsCOMPtr referrerURI; if (aCallerPrincipal) { + // First do a security check nsCOMPtr securityManager = do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); @@ -513,6 +515,22 @@ txCompileObserver::startLoad(nsIURI* aUri, txStylesheetCompiler* aCompiler, rv = securityManager->CheckSameOriginURI(referrerURI, aUri); NS_ENSURE_SUCCESS(rv, rv); + + // Then do a content policy check + PRInt16 decision = nsIContentPolicy::ACCEPT; + rv = NS_CheckContentLoadPolicy(nsIContentPolicy::TYPE_STYLESHEET, + aUri, + referrerURI, + // Pass source document as the context + mProcessor->GetSourceContentModel(), + NS_LITERAL_CSTRING("text/xml"), + nsnull, + &decision); + NS_ENSURE_SUCCESS(rv, rv); + + if (NS_CP_REJECTED(decision)) { + return NS_ERROR_NOT_AVAILABLE; + } } nsCOMPtr channel; diff --git a/mozilla/extensions/transformiix/source/xslt/txMozillaXSLTProcessor.h b/mozilla/extensions/transformiix/source/xslt/txMozillaXSLTProcessor.h index 75727efb376..c0b02ec5931 100644 --- a/mozilla/extensions/transformiix/source/xslt/txMozillaXSLTProcessor.h +++ b/mozilla/extensions/transformiix/source/xslt/txMozillaXSLTProcessor.h @@ -150,6 +150,11 @@ public: void reportError(nsresult aResult, const PRUnichar *aErrorText, const PRUnichar *aSourceText); + nsIDOMNode *GetSourceContentModel() + { + return mSource; + } + private: nsresult DoTransform(); void notifyError();