From 448fec81bf45e0e74be887d139519a3c403c625e Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Tue, 8 Dec 2015 17:32:13 +0100 Subject: tdf#62381: Stop using NPAPI plugin when NP_Initialize fails (...in the Windows-specific code path) Change-Id: I5984ecd88a12d3f22aecaa685bd552f4235fb13d (cherry picked from commit 00daa67d745ae84ed15d3f210001193c6e950144) Reviewed-on: https://gerrit.libreoffice.org/20474 Tested-by: Jenkins Reviewed-by: Michael Stahl --- extensions/source/plugin/base/xplugin.cxx | 11 ++++++++--- extensions/source/plugin/inc/plugin/win/sysplug.hxx | 3 +++ extensions/source/plugin/win/sysplug.cxx | 10 +++++++++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/extensions/source/plugin/base/xplugin.cxx b/extensions/source/plugin/base/xplugin.cxx index 9933739cddca..c1a25dc4e63a 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 555d4004e3e2..bd4ff2c326f8 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(); @@ -114,6 +116,7 @@ public: virtual NPError NPP_SetValue( NPP instance, NPNVariable 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 d34c80012295..eb14ec05be88 100644 --- a/extensions/source/plugin/win/sysplug.cxx +++ b/extensions/source/plugin/win/sysplug.cxx @@ -98,11 +98,19 @@ 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) { -- cgit v1.2.3