Kaydet (Commit) b0a7722e authored tarafından Caolán McNamara's avatar Caolán McNamara

coverity#1169848 Uncaught exception

Change-Id: I27903e8b6bbf28a33601d793719ac5bcd3309db0
üst 2234f541
...@@ -278,55 +278,65 @@ void SAL_CALL ModuleManager::replaceByName(const OUString& sName , ...@@ -278,55 +278,65 @@ void SAL_CALL ModuleManager::replaceByName(const OUString& sName ,
css::lang::WrappedTargetException , css::lang::WrappedTargetException ,
css::uno::RuntimeException ) css::uno::RuntimeException )
{ {
::comphelper::SequenceAsHashMap lProps(aValue); try
if (lProps.empty() )
{ {
throw css::lang::IllegalArgumentException( ::comphelper::SequenceAsHashMap lProps(aValue);
OUString("No properties given to replace part of module."), if (lProps.empty() )
static_cast< cppu::OWeakObject * >(this), {
2); throw css::lang::IllegalArgumentException(
} OUString("No properties given to replace part of module."),
static_cast< cppu::OWeakObject * >(this),
2);
}
// SAFE -> ---------------------------------- // SAFE -> ----------------------------------
ReadGuard aReadLock(m_aLock); ReadGuard aReadLock(m_aLock);
css::uno::Reference< css::uno::XComponentContext > xContext = m_xContext; css::uno::Reference< css::uno::XComponentContext > xContext = m_xContext;
aReadLock.unlock(); aReadLock.unlock();
// <- SAFE ---------------------------------- // <- SAFE ----------------------------------
// get access to the element
// Note: Dont use impl_getConfig() method here. Because it creates a readonly access only, further
// it cache it as a member of this module manager instance. If we change some props there ... but dont
// flush changes (because an error occurred) we will read them later. If we use a different config access
// we can close it without a flush ... and our read data wont be affected .-)
css::uno::Reference< css::uno::XInterface > xCfg = ::comphelper::ConfigurationHelper::openConfig(
xContext,
OUString(CFGPATH_FACTORIES),
::comphelper::ConfigurationHelper::E_STANDARD);
css::uno::Reference< css::container::XNameAccess > xModules (xCfg, css::uno::UNO_QUERY_THROW);
css::uno::Reference< css::container::XNameReplace > xModule ;
xModules->getByName(sName) >>= xModule;
if (!xModule.is())
{
throw css::uno::RuntimeException(
OUString("Was not able to get write access to the requested module entry inside configuration."),
static_cast< cppu::OWeakObject * >(this));
}
// get access to the element ::comphelper::SequenceAsHashMap::const_iterator pProp;
// Note: Dont use impl_getConfig() method here. Because it creates a readonly access only, further for ( pProp = lProps.begin();
// it cache it as a member of this module manager instance. If we change some props there ... but dont pProp != lProps.end() ;
// flush changes (because an error occurred) we will read them later. If we use a different config access ++pProp )
// we can close it without a flush ... and our read data wont be affected .-) {
css::uno::Reference< css::uno::XInterface > xCfg = ::comphelper::ConfigurationHelper::openConfig( const OUString& sPropName = pProp->first;
xContext, const css::uno::Any& aPropValue = pProp->second;
OUString(CFGPATH_FACTORIES),
::comphelper::ConfigurationHelper::E_STANDARD);
css::uno::Reference< css::container::XNameAccess > xModules (xCfg, css::uno::UNO_QUERY_THROW);
css::uno::Reference< css::container::XNameReplace > xModule ;
xModules->getByName(sName) >>= xModule;
if (!xModule.is())
{
throw css::uno::RuntimeException(
OUString("Was not able to get write access to the requested module entry inside configuration."),
static_cast< cppu::OWeakObject * >(this));
}
::comphelper::SequenceAsHashMap::const_iterator pProp; // let "NoSuchElementException" out ! We support the same API ...
for ( pProp = lProps.begin(); // and without a flush() at the end all changed data before will be ignored !
pProp != lProps.end() ; xModule->replaceByName(sPropName, aPropValue);
++pProp ) }
{
const OUString& sPropName = pProp->first;
const css::uno::Any& aPropValue = pProp->second;
// let "NoSuchElementException" out ! We support the same API ... ::comphelper::ConfigurationHelper::flush(xCfg);
// and without a flush() at the end all changed data before will be ignored ! }
xModule->replaceByName(sPropName, aPropValue); catch (const css::beans::IllegalTypeException& e)
{
css::uno::Any a(e);
throw css::lang::WrappedTargetException(
OUString("ModuleManager::replaceByName: IllegalType exception"),
css::uno::Reference<css::uno::XInterface>(*this), a);
} }
::comphelper::ConfigurationHelper::flush(xCfg);
} }
css::uno::Any SAL_CALL ModuleManager::getByName(const OUString& sName) css::uno::Any SAL_CALL ModuleManager::getByName(const OUString& sName)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment