summaryrefslogtreecommitdiff
path: root/extensions
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2015-12-08 17:32:13 +0100
committerStephan Bergmann <sbergman@redhat.com>2015-12-08 17:34:10 +0100
commit00daa67d745ae84ed15d3f210001193c6e950144 (patch)
tree747adcf70a5d67966f270ac452d6f696120ed396 /extensions
parentaf9f0e5f3586a7a74db2ccec75f0a17ee48f1ee5 (diff)
tdf#62381: Stop using NPAPI plugin when NP_Initialize fails
(...in the Windows-specific code path) Change-Id: I5984ecd88a12d3f22aecaa685bd552f4235fb13d
Diffstat (limited to 'extensions')
-rw-r--r--extensions/source/plugin/base/xplugin.cxx11
-rw-r--r--extensions/source/plugin/inc/plugin/win/sysplug.hxx3
-rw-r--r--extensions/source/plugin/win/sysplug.cxx10
3 files changed, 20 insertions, 4 deletions
diff --git a/extensions/source/plugin/base/xplugin.cxx b/extensions/source/plugin/base/xplugin.cxx
index 43d09edbf731..46e903466ad1 100644
--- a/extensions/source/plugin/base/xplugin.cxx
+++ b/extensions/source/plugin/base/xplugin.cxx
@@ -548,9 +548,14 @@ void XPlugin_Impl::loadPlugin()
return;
#elif defined WNT
- PluginComm* pComm = new PluginComm_Impl( m_aDescription.Mimetype,
- m_aDescription.PluginName,
- (HWND)pEnvData->hWnd );
+ PluginComm* pComm;
+ try {
+ pComm = new PluginComm_Impl(
+ m_aDescription.Mimetype, m_aDescription.PluginName,
+ (HWND)pEnvData->hWnd);
+ } catch (PluginComm_Impl::CannotInitializeException &) {
+ return;
+ }
#endif
setPluginComm( pComm );
diff --git a/extensions/source/plugin/inc/plugin/win/sysplug.hxx b/extensions/source/plugin/inc/plugin/win/sysplug.hxx
index 3753212ac889..38c5abf3d62f 100644
--- a/extensions/source/plugin/inc/plugin/win/sysplug.hxx
+++ b/extensions/source/plugin/inc/plugin/win/sysplug.hxx
@@ -86,6 +86,8 @@ class PluginComm_Impl :
virtual long doIt();
public:
+ struct CannotInitializeException {};
+
PluginComm_Impl( const OUString& rMIME, const OUString& rName, HWND hWnd );
virtual ~PluginComm_Impl();
@@ -112,6 +114,7 @@ public:
virtual NPError NPP_GetValue( NPP instance, NPPVariable variable, void *ret_alue );
private:
+ void shutdown();
BOOL retrieveFunction( TCHAR const * pName, void** ppFunc ) const;
private:
diff --git a/extensions/source/plugin/win/sysplug.cxx b/extensions/source/plugin/win/sysplug.cxx
index 305964170b9b..9c25da3c219d 100644
--- a/extensions/source/plugin/win/sysplug.cxx
+++ b/extensions/source/plugin/win/sysplug.cxx
@@ -98,12 +98,20 @@ PluginComm_Impl::PluginComm_Impl( const OUString& /*rMIME*/, const OUString& rNa
"### version failure!" );
m_eCall = eNP_Initialize;
- execute();
+ if (execute() != NPERR_NO_ERROR) {
+ shutdown();
+ throw CannotInitializeException();
+ }
}
PluginComm_Impl::~PluginComm_Impl()
{
+ shutdown();
+}
+
+void PluginComm_Impl::shutdown()
+{
if (_plDLL)
{
// NPP_Shutdown();