From 0036bf7da52485d89b9ba9384dba5fb1375b9877 Mon Sep 17 00:00:00 2001 From: "jst%mozilla.org" Date: Sun, 28 Jan 2007 19:44:05 +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+a=dveditz@cruzio.com git-svn-id: svn://10.0.0.236/branches/MOZILLA_1_8_BRANCH@219080 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/modules/plugin/base/src/ns4xPlugin.cpp | 15 +++++++++++++++ .../modules/plugin/base/src/nsPluginHostImpl.cpp | 14 ++++++++++++++ .../modules/plugin/base/src/nsPluginHostImpl.h | 2 ++ 3 files changed, 31 insertions(+) diff --git a/mozilla/modules/plugin/base/src/ns4xPlugin.cpp b/mozilla/modules/plugin/base/src/ns4xPlugin.cpp index ea2a6bca2c4..16a7051ba31 100644 --- a/mozilla/modules/plugin/base/src/ns4xPlugin.cpp +++ b/mozilla/modules/plugin/base/src/ns4xPlugin.cpp @@ -1120,6 +1120,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 73f78061c51..42560243950 100644 --- a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp +++ b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp @@ -2571,6 +2571,20 @@ nsPluginHostImpl::nsPluginHostImpl() mCachedPlugins = nsnull; } +// static +const char * +nsPluginHostImpl::GetPluginName(nsIPluginInstance *aPluginInstance) +{ + nsActivePlugin *plugin = + gActivePluginList ? gActivePluginList->find(aPluginInstance) : nsnull; + + if (plugin && plugin->mPluginTag) { + return plugin->mPluginTag->mName; + } + + return nsnull; +} + //////////////////////////////////////////////////////////////////////// nsPluginHostImpl::~nsPluginHostImpl() diff --git a/mozilla/modules/plugin/base/src/nsPluginHostImpl.h b/mozilla/modules/plugin/base/src/nsPluginHostImpl.h index e101f7b685f..eb164960d2a 100644 --- a/mozilla/modules/plugin/base/src/nsPluginHostImpl.h +++ b/mozilla/modules/plugin/base/src/nsPluginHostImpl.h @@ -195,6 +195,8 @@ public: NS_DECL_ISUPPORTS + static const char *GetPluginName(nsIPluginInstance *aPluginInstance); + //nsIPluginManager interface - the main interface nsIPlugin communicates to NS_IMETHOD