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