Apache OpenOffice (AOO) Bugzilla – Issue 32220
Binfilter is not exception-safe
Last modified: 2017-05-20 11:29:45 UTC
When exceptions are thrown from code employed by binfilter, these exceptions potentially crash the whole office, since parts of binfilter are compiled without exception support (this leads to immediate abort() under Unix, and full stack unwinding under Windows, resulting in the application starting over in the toplevel stack frame). This violates the XFilter interface contract, which only allows for RuntimeExceptions to be thrown (not arbitrary exceptions, and certainly not the undefined behaviour as exhibited in this case). One example of such an exception thrown is the following stack trace, where the ucn threw an InteractiveAugmentedIOException deep down during file IO: kernel32.dll!77e73887() msci_uno.dll!msci::msci_raiseException() + 0x124C++ msci_uno.dll!bridges::cpp_uno::shared::CppInterfaceProxy::getOid() + 0x370C++ msci_uno.dll!bridges::cpp_uno::shared::VtableFactory::createBlock() + 0x3feC++ msci_uno.dll!bridges::cpp_uno::shared::VtableFactory::createBlock() + 0x441C++ ucbhelper3MSC.dll!ucbhelper::cancelCommandExecution() + 0x1adC++ ucpfile1.dll!fileaccess::throw_handler() + 0xf0fC++ ucpfile1.dll!fileaccess::TaskManager::endTask() + 0xd3C++ ucpfile1.dll!fileaccess::BaseContent::execute() + 0x5a3C++ ucbhelper3MSC.dll!ucb::Content_Impl::executeCommand() + 0x78C++ ucbhelper3MSC.dll!ucb::Content::executeCommand() + 0xb9C++ utl680mi.dll!utl::Moderator::handle() + 0x478C++ utl680mi.dll!utl::ModeratorsInteractionHandler::handle() + 0x202C++ utl680mi.dll!utl::UcbLockBytes::CreateLockBytes() + 0x3f1C++ utl680mi.dll!utl::UcbStreamHelper::CreateStream() + 0x464C++ utl680mi.dll!utl::UcbStreamHelper::CreateStream() + 0x22C++ sot680mi.dll!UCBStorage_Impl::Init() + 0x1bdC++ sot680mi.dll!UCBStorage::UCBStorage() + 0x9cC++ sot680mi.dll!SotStorage::SotStorage() + 0x118C++ bf_svx680mi.dll!binfilter::GetStorage() + 0x1c2C++ bf_svx680mi.dll!binfilter::SfxConfigManager::SfxConfigManager() + 0x182C++ bf_svx680mi.dll!binfilter::SfxApplication::SfxApplication() + 0xa73C++ bf_ofa680mi.dll!binfilter::OfficeApplication::OfficeApplication() + 0x28C++ bf_wrapper680mi.dll!binfilter::bf_OfficeWrapper::bf_OfficeWrapper() + 0x6bC++ bf_wrapper680mi.dll!binfilter::bf_OfficeWrapper_CreateInstance() + 0xb7C++ cppuhelper3MSC.dll!cppu::OSingleFactoryHelper::createInstanceEveryTime() + 0xcdC++ cppuhelper3MSC.dll!cppu::OSingleFactoryHelper::createInstanceWithContext() + 0x20C++ cppuhelper3MSC.dll!cppu::OFactoryComponentHelper::createInstanceWithContext() + 0x67C++ cppuhelper3MSC.dll!cppu::ORegistryFactoryHelper::createInstanceEveryTime() + 0xccC++ cppuhelper3MSC.dll!cppu::OSingleFactoryHelper::createInstanceWithContext() + 0x20C++ cppuhelper3MSC.dll!cppu::OFactoryComponentHelper::createInstanceWithContext() + 0xc8C++ legacy_binfilters680mi.dll!legacy_binfilters::OServiceManager::createInstanceWithContext() + 0xf1C++ legacy_binfilters680mi.dll!legacy_binfilters::LegacyServiceManager::createInstanceWithContext() + 0x3bC++ legacy_binfilters680mi.dll!legacy_binfilters::LegacyServiceManager::createInstance() + 0x25C++ >bf_migratefilter680mi.dll!binfilter::bf_MigrateFilter::filter(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> & aDescriptor={...}) Line 807 + 0x7dC++ sfx680mi.dll!SfxObjectShell::ExportTo(SfxMedium & rMedium={...}) Line 1734 + 0x1fC++ sfx680mi.dll!SfxObjectShell::SaveTo_Impl(SfxMedium & rMedium={...}, const SfxItemSet * pSet=0x00000000, unsigned char bPrepareForDirectAccess='') Line 1189 + 0xfC++ sfx680mi.dll!SfxObjectShell::PreDoSaveAs_Impl(const String & rFileName={...}, const String & aFilterName={...}, SfxItemSet * pParams=0x092a3268) Line 2169 + 0x23C++ sfx680mi.dll!SfxObjectShell::CommonSaveAs_Impl(const INetURLObject & aURL={...}, const String & aFilterName={...}, SfxItemSet * aParams=0x093fc7b8) Line 2021 + 0x43C++ sfx680mi.dll!SfxObjectShell::APISaveAs_Impl(const String & aFileName={...}, SfxItemSet * aParams=0x093fc7b8) Line 306 + 0x31C++ sfx680mi.dll!SfxBaseModel::impl_store(SfxObjectShell * pObjectShell=0x05d2bf00, const rtl::OUString & sURL={...}, const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> & seqArguments={...}, unsigned char bSaveTo=0) Line 2839 + 0x23C++ sfx680mi.dll!SfxBaseModel::storeAsURL(const rtl::OUString & rURL={...}, const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> & rArgs={...}) Line 1974C++ msci_uno.dll!bridges::cpp_uno::shared::UnoInterfaceProxy::getCppI() + 0x66C++ msci_uno.dll!bridges::cpp_uno::shared::UnoInterfaceProxy::getCppI() + 0x410C++ msci_uno.dll!bridges::cpp_uno::shared::UnoInterfaceProxy::dispatch() + 0x2bdC++ reflection.uno.dll!stoc_corefl::IdlInterfaceMethodImpl::invoke() + 0x503C++ sb680mi.dll!SbUnoObject::Notify() + 0xa21C++ svl680mi.dll!SfxBroadcaster::Broadcast() + 0x58C++ svt680mi.dll!SbxVariable::Broadcast() + 0xd7C++ svt680mi.dll!SbxValue::SbxValue() + 0xd3C++ ...etc. I've grepped binfilter for ENABLE_EXCEPTIONS=TRUE, at least bf_ofa is completely without exception support. Du
.
Reset assigne to the default "issues@openoffice.apache.org".