Issue 32220 - Binfilter is not exception-safe
Summary: Binfilter is not exception-safe
Status: CONFIRMED
Alias: None
Product: Draw
Classification: Application
Component: code (show other issues)
Version: 680m48
Hardware: All All
: P4 Trivial (vote)
Target Milestone: AOO Later
Assignee: AOO issues mailing list
QA Contact:
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-07-28 13:04 UTC by thb
Modified: 2017-05-20 11:29 UTC (History)
1 user (show)

See Also:
Issue Type: DEFECT
Latest Confirmation in: ---
Developer Difficulty: ---


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description thb 2004-07-28 13:04:38 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
Comment 1 Armin Le Grand 2004-09-09 17:40:19 UTC
.
Comment 2 Marcus 2017-05-20 11:29:45 UTC
Reset assigne to the default "issues@openoffice.apache.org".