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 ,
css::lang::WrappedTargetException ,
css::uno::RuntimeException )
{
::comphelper::SequenceAsHashMap lProps(aValue);
if (lProps.empty() )
try
{
throw css::lang::IllegalArgumentException(
OUString("No properties given to replace part of module."),
static_cast< cppu::OWeakObject * >(this),
2);
}
::comphelper::SequenceAsHashMap lProps(aValue);
if (lProps.empty() )
{
throw css::lang::IllegalArgumentException(
OUString("No properties given to replace part of module."),
static_cast< cppu::OWeakObject * >(this),
2);
}
// SAFE -> ----------------------------------
ReadGuard aReadLock(m_aLock);
css::uno::Reference< css::uno::XComponentContext > xContext = m_xContext;
aReadLock.unlock();
// <- SAFE ----------------------------------
// SAFE -> ----------------------------------
ReadGuard aReadLock(m_aLock);
css::uno::Reference< css::uno::XComponentContext > xContext = m_xContext;
aReadLock.unlock();
// <- 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
// 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));
}
::comphelper::SequenceAsHashMap::const_iterator pProp;
for ( pProp = lProps.begin();
pProp != lProps.end() ;
++pProp )
{
const OUString& sPropName = pProp->first;
const css::uno::Any& aPropValue = pProp->second;
::comphelper::SequenceAsHashMap::const_iterator pProp;
for ( pProp = lProps.begin();
pProp != lProps.end() ;
++pProp )
{
const OUString& sPropName = pProp->first;
const css::uno::Any& aPropValue = pProp->second;
// let "NoSuchElementException" out ! We support the same API ...
// and without a flush() at the end all changed data before will be ignored !
xModule->replaceByName(sPropName, aPropValue);
}
// let "NoSuchElementException" out ! We support the same API ...
// and without a flush() at the end all changed data before will be ignored !
xModule->replaceByName(sPropName, aPropValue);
::comphelper::ConfigurationHelper::flush(xCfg);
}
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)
......
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