From 116af3ce8704c7fa9db2d9400d0e4a22962fc42a Mon Sep 17 00:00:00 2001 From: "jst%mozilla.org" Date: Sun, 28 Jan 2007 19:50:37 +0000 Subject: [PATCH] Fixing bug 366082. Prevent Adobe Acrobat from loading URLs other than http:, https:, or ftp: w/o specifying a target. r+sr=dveditz@cruzio.com git-svn-id: svn://10.0.0.236/trunk@219081 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/modules/plugin/base/src/ns4xPlugin.cpp | 15 +++++++++++++++ .../modules/plugin/base/src/nsPluginHostImpl.cpp | 16 +++++++++++++++- .../modules/plugin/base/src/nsPluginHostImpl.h | 2 ++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/mozilla/modules/plugin/base/src/ns4xPlugin.cpp b/mozilla/modules/plugin/base/src/ns4xPlugin.cpp index 07510bd3c99..36cedbb16a9 100644 --- a/mozilla/modules/plugin/base/src/ns4xPlugin.cpp +++ b/mozilla/modules/plugin/base/src/ns4xPlugin.cpp @@ -975,6 +975,21 @@ _geturl(NPP npp, const char* relativeURL, const char* target) ("NPN_GetURL: npp=%p, target=%s, url=%s\n", (void *)npp, target, relativeURL)); + // Block Adobe Acrobat from loading URLs that are not http:, https:, + // or ftp: URLs if the given target is null. + if (target == nsnull && relativeURL && + (strncmp(relativeURL, "http:", 5) != 0) && + (strncmp(relativeURL, "https:", 6) != 0) && + (strncmp(relativeURL, "ftp:", 4) != 0)) { + ns4xPluginInstance *inst = (ns4xPluginInstance *) npp->ndata; + + const char *name = nsPluginHostImpl::GetPluginName(inst); + + if (name && strstr(name, "Adobe") && strstr(name, "Acrobat")) { + return NPERR_NO_ERROR; + } + } + return MakeNew4xStreamInternal (npp, relativeURL, target, eNPPStreamTypeInternal_Get); } diff --git a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp index c05c800eaba..243149ecb07 100644 --- a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp +++ b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp @@ -2566,6 +2566,20 @@ nsPluginHostImpl::GetInst() return sInst; } +// static +const char * +nsPluginHostImpl::GetPluginName(nsIPluginInstance *aPluginInstance) +{ + nsActivePlugin *plugin = + gActivePluginList ? gActivePluginList->find(aPluginInstance) : nsnull; + + if (plugin && plugin->mPluginTag) { + return plugin->mPluginTag->mName; + } + + return nsnull; +} + //////////////////////////////////////////////////////////////////////// NS_IMETHODIMP nsPluginHostImpl::GetValue(nsPluginManagerVariable aVariable, void *aValue) @@ -6699,7 +6713,7 @@ nsresult nsPluginHostImpl::AddPrefObserver() //////////////////////////////////////////////////////////////////////////////////// nsresult nsPluginStreamListenerPeer::ServeStreamAsFile(nsIRequest *request, - nsISupports* aContext) + nsISupports* aContext) { if (!mInstance) return NS_ERROR_FAILURE; diff --git a/mozilla/modules/plugin/base/src/nsPluginHostImpl.h b/mozilla/modules/plugin/base/src/nsPluginHostImpl.h index 9b032e32235..fe486a5b4fe 100644 --- a/mozilla/modules/plugin/base/src/nsPluginHostImpl.h +++ b/mozilla/modules/plugin/base/src/nsPluginHostImpl.h @@ -213,6 +213,8 @@ public: NS_DECL_ISUPPORTS + static const char *GetPluginName(nsIPluginInstance *aPluginInstance); + //nsIPluginManager interface - the main interface nsIPlugin communicates to NS_IMETHOD