commit 98514d2707597dca05a7318e3887b97c3b0b8857 Author: Blake Kaplan mrbkap@gmail.com Date: Thu Mar 13 18:55:13 2014 -0400
Bug 982906 - No free lunches! r=bzbarsky, a=lsblakk --- dom/base/nsGlobalWindow.cpp | 30 +++++++++++++++--------------- dom/base/nsGlobalWindow.h | 5 ++--- 2 files changed, 17 insertions(+), 18 deletions(-)
diff --git a/dom/base/nsGlobalWindow.cpp b/dom/base/nsGlobalWindow.cpp index 7b6707a..f2192d6 100644 --- a/dom/base/nsGlobalWindow.cpp +++ b/dom/base/nsGlobalWindow.cpp @@ -10829,14 +10829,12 @@ nsGlobalWindow::GetScrollFrame()
nsresult nsGlobalWindow::BuildURIfromBase(const char *aURL, nsIURI **aBuiltURI, - bool *aFreeSecurityPass, JSContext **aCXused) { nsIScriptContext *scx = GetContextInternal(); JSContext *cx = nullptr;
*aBuiltURI = nullptr; - *aFreeSecurityPass = false; if (aCXused) *aCXused = nullptr;
@@ -10877,17 +10875,14 @@ nsGlobalWindow::BuildURIfromBase(const char *aURL, nsIURI **aBuiltURI,
if (!sourceWindow) { sourceWindow = do_QueryInterface(NS_ISUPPORTS_CAST(nsIDOMWindow *, this)); - *aFreeSecurityPass = true; }
- if (sourceWindow) { - nsCOMPtr<nsIDOMDocument> domDoc; - sourceWindow->GetDocument(getter_AddRefs(domDoc)); - nsCOMPtr<nsIDocument> doc(do_QueryInterface(domDoc)); - if (doc) { - baseURI = doc->GetDocBaseURI(); - charset = doc->GetDocumentCharacterSet(); - } + nsCOMPtr<nsIDOMDocument> domDoc; + sourceWindow->GetDocument(getter_AddRefs(domDoc)); + nsCOMPtr<nsIDocument> doc(do_QueryInterface(domDoc)); + if (doc) { + baseURI = doc->GetDocBaseURI(); + charset = doc->GetDocumentCharacterSet(); }
if (aCXused) @@ -10899,17 +10894,22 @@ nsresult nsGlobalWindow::SecurityCheckURL(const char *aURL) { JSContext *cxUsed; - bool freePass; nsCOMPtr<nsIURI> uri;
- if (NS_FAILED(BuildURIfromBase(aURL, getter_AddRefs(uri), &freePass, &cxUsed))) + if (NS_FAILED(BuildURIfromBase(aURL, getter_AddRefs(uri), &cxUsed))) { return NS_ERROR_FAILURE; + } + + if (!cxUsed) { + return NS_OK; + }
AutoPushJSContext cx(cxUsed);
- if (!freePass && NS_FAILED(nsContentUtils::GetSecurityManager()-> - CheckLoadURIFromScript(cx, uri))) + if (NS_FAILED(nsContentUtils::GetSecurityManager()-> + CheckLoadURIFromScript(cx, uri))) { return NS_ERROR_FAILURE; + }
return NS_OK; } diff --git a/dom/base/nsGlobalWindow.h b/dom/base/nsGlobalWindow.h index aab2253..613dd2b 100644 --- a/dom/base/nsGlobalWindow.h +++ b/dom/base/nsGlobalWindow.h @@ -950,9 +950,8 @@ protected: already_AddRefed<nsIBaseWindow> GetTreeOwnerWindow(); already_AddRefed<nsIWebBrowserChrome> GetWebBrowserChrome(); nsresult SecurityCheckURL(const char *aURL); - nsresult BuildURIfromBase(const char *aURL, - nsIURI **aBuiltURI, - bool *aFreeSecurityPass, JSContext **aCXused); + nsresult BuildURIfromBase(const char *aURL, nsIURI **aBuiltURI, + JSContext **aCXused); bool PopupWhitelisted(); PopupControlState RevisePopupAbuseLevel(PopupControlState); void FireAbuseEvents(bool aBlocked, bool aWindow,
tor-commits@lists.torproject.org