From 49ce8b7af697a3952f85e9ff7719f9be708e4434 Mon Sep 17 00:00:00 2001 From: "morse%netscape.com" Date: Sat, 25 Mar 2000 07:09:25 +0000 Subject: [PATCH] fix bug 32374, block foreign images git-svn-id: svn://10.0.0.236/trunk@64111 18797224-902f-48f8-a5cc-f745e15eee43 --- .../layout/base/public/nsIFrameImageLoader.h | 3 ++ .../layout/base/src/nsFrameImageLoader.cpp | 7 ++++ mozilla/layout/base/src/nsFrameImageLoader.h | 1 + mozilla/modules/libimg/src/if.cpp | 33 +++++++------------ 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/mozilla/layout/base/public/nsIFrameImageLoader.h b/mozilla/layout/base/public/nsIFrameImageLoader.h index a14a4d4f50c..38bfde9e558 100644 --- a/mozilla/layout/base/public/nsIFrameImageLoader.h +++ b/mozilla/layout/base/public/nsIFrameImageLoader.h @@ -55,6 +55,8 @@ typedef nsresult (*nsIFrameImageLoaderCB)(nsIPresContext* aPresContext, */ class nsIFrameImageLoader : public nsISupports { public: + static const nsIID& GetIID() {static nsIID iid = NS_IFRAME_IMAGE_LOADER_IID; return iid;} + NS_IMETHOD Init(nsIPresContext* aPresContext, nsIImageGroup* aGroup, const nsString& aURL, @@ -81,6 +83,7 @@ public: NS_IMETHOD SafeToDestroy(PRBool* aResult) = 0; NS_IMETHOD GetURL(nsString& aResult) = 0; + NS_IMETHOD GetPresContext(nsIPresContext** aPresContext) = 0; NS_IMETHOD GetImage(nsIImage** aResult) = 0; diff --git a/mozilla/layout/base/src/nsFrameImageLoader.cpp b/mozilla/layout/base/src/nsFrameImageLoader.cpp index 154671e0de3..855036d7b83 100644 --- a/mozilla/layout/base/src/nsFrameImageLoader.cpp +++ b/mozilla/layout/base/src/nsFrameImageLoader.cpp @@ -355,6 +355,13 @@ nsFrameImageLoader::GetURL(nsString& aResult) return NS_OK; } +NS_IMETHODIMP +nsFrameImageLoader::GetPresContext(nsIPresContext** aPresContext) +{ + NS_IF_ADDREF(*aPresContext = mPresContext); + return NS_OK; +} + NS_IMETHODIMP nsFrameImageLoader::GetImage(nsIImage** aResult) { diff --git a/mozilla/layout/base/src/nsFrameImageLoader.h b/mozilla/layout/base/src/nsFrameImageLoader.h index 6fb5176bc6d..f899d81fdf7 100644 --- a/mozilla/layout/base/src/nsFrameImageLoader.h +++ b/mozilla/layout/base/src/nsFrameImageLoader.h @@ -80,6 +80,7 @@ public: NS_IMETHOD SafeToDestroy(PRBool* aResult); NS_IMETHOD GetURL(nsString& aResult); + NS_IMETHOD GetPresContext(nsIPresContext** aPresContext); NS_IMETHOD GetImage(nsIImage** aResult); diff --git a/mozilla/modules/libimg/src/if.cpp b/mozilla/modules/libimg/src/if.cpp index 971a98af238..cbf07c49b7c 100644 --- a/mozilla/modules/libimg/src/if.cpp +++ b/mozilla/modules/libimg/src/if.cpp @@ -1907,33 +1907,24 @@ PRBool il_PermitLoad(const char * image_url, nsIImageRequestObserver * aObserver } /* obtain first url from aObserver */ - if (!aObserver) { Recycle(host); return PR_TRUE; } - -#ifdef xxx - /* real ugly hack until I figure out the right way to get the presContext from aObserver */ - nsIPresContext* presContext = (nsIPresContext*)(((PRInt32 *)aObserver)[3]); - - nsIURI * firstUri; - rv = presContext->GetBaseURL(&firstUri); - if (NS_FAILED(rv) || !firstUri) { - Recycle(host); - return PR_TRUE; + char* firstHost = 0; + nsCOMPtr frameImageLoader = do_QueryInterface(aObserver); + if (frameImageLoader) { + nsCOMPtr presContext; + rv = frameImageLoader->GetPresContext(getter_AddRefs(presContext)); + if (presContext) { + nsCOMPtr firstURI; + presContext->GetBaseURL(getter_AddRefs(firstURI)); + rv = firstURI->GetHost(&firstHost); + } } - - char* firstHost = nsnull; - rv = firstUri->GetHost(&firstHost); - NS_RELEASE(firstUri); - if (NS_FAILED(rv)) { - Recycle(host); - return PR_TRUE; + if (!firstHost) { + firstHost = PL_strdup(host); } -#else - char* firstHost = PL_strdup(host); -#endif /* check to see if we need to block image from loading */ NS_WITH_SERVICE(nsICookieService, cookieservice, kCookieServiceCID, &rv);