summaryrefslogtreecommitdiff
path: root/dbaccess
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2018-05-24 15:47:30 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2018-05-25 21:46:49 +0200
commit3a51daeace695ead38cfd82b3a0f1e6f25a32e0f (patch)
treeaf3ef1144aef6ed62f4ab99b88d13b41bd3b3694 /dbaccess
parentff3bdde2527123fc9e011ff0d93e958174632186 (diff)
Improve re-throwing of UNO exceptions
(*) if we are already throwing a Wrapped*Exception, get the exception using cppu::getCaughtexception. (*) when catching and then immediately throwing UNO exceptions, use cppu::getCaughtException to prevent exception slicing (*) if we are going to catch an exception and then immediately throw a RuntimeException, rather throw a WrappedTargetRuntimeException and preserve the original exception information. Change-Id: Ia7a501a50ae0e6f4d05186333c8517fdcb17d558 Reviewed-on: https://gerrit.libreoffice.org/54692 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'dbaccess')
-rw-r--r--dbaccess/source/core/api/CRowSetDataColumn.cxx3
-rw-r--r--dbaccess/source/core/dataaccess/databasedocument.cxx21
-rw-r--r--dbaccess/source/core/dataaccess/definitioncontainer.cxx8
-rw-r--r--dbaccess/source/filter/xml/xmlfilter.cxx6
-rw-r--r--dbaccess/source/ui/control/tabletree.cxx5
-rw-r--r--dbaccess/source/ui/dlg/DbAdminImpl.cxx6
6 files changed, 28 insertions, 21 deletions
diff --git a/dbaccess/source/core/api/CRowSetDataColumn.cxx b/dbaccess/source/core/api/CRowSetDataColumn.cxx
index 14970364a798..c11fe639bf25 100644
--- a/dbaccess/source/core/api/CRowSetDataColumn.cxx
+++ b/dbaccess/source/core/api/CRowSetDataColumn.cxx
@@ -113,9 +113,10 @@ void SAL_CALL ORowSetDataColumn::getFastPropertyValue( Any& rValue, sal_Int32 nH
}
catch(const SQLException &e)
{
+ css::uno::Any anyEx = cppu::getCaughtException();
throw WrappedTargetRuntimeException("Could not retrieve column value: " + e.Message,
*const_cast<ORowSetDataColumn*>(this),
- Any(e));
+ anyEx);
}
}
else if ( PROPERTY_ID_LABEL == nHandle && !m_sLabel.isEmpty() )
diff --git a/dbaccess/source/core/dataaccess/databasedocument.cxx b/dbaccess/source/core/dataaccess/databasedocument.cxx
index eee5e8465031..e147cf0281de 100644
--- a/dbaccess/source/core/dataaccess/databasedocument.cxx
+++ b/dbaccess/source/core/dataaccess/databasedocument.cxx
@@ -646,18 +646,21 @@ void SAL_CALL ODatabaseDocument::storeToRecoveryFile( const OUString& i_TargetLo
// commit the root storage
tools::stor::commitStorageIfWriteable( xTargetStorage );
}
+ catch( const IOException& )
+ {
+ throw;
+ }
+ catch( const RuntimeException& )
+ {
+ throw;
+ }
+ catch( const WrappedTargetException& )
+ {
+ throw;
+ }
catch( const Exception& )
{
Any aError = ::cppu::getCaughtException();
- if ( aError.isExtractableTo( ::cppu::UnoType< IOException >::get() )
- || aError.isExtractableTo( ::cppu::UnoType< RuntimeException >::get() )
- || aError.isExtractableTo( ::cppu::UnoType< WrappedTargetException >::get() )
- )
- {
- // allowed to leave
- throw;
- }
-
throw WrappedTargetException( OUString(), *this, aError );
}
}
diff --git a/dbaccess/source/core/dataaccess/definitioncontainer.cxx b/dbaccess/source/core/dataaccess/definitioncontainer.cxx
index 95b4676006ba..ae52ecc5e67b 100644
--- a/dbaccess/source/core/dataaccess/definitioncontainer.cxx
+++ b/dbaccess/source/core/dataaccess/definitioncontainer.cxx
@@ -30,6 +30,7 @@
#include <comphelper/enumhelper.hxx>
#include <cppuhelper/exc_hlp.hxx>
#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
+#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
#include <com/sun/star/lang/XComponent.hpp>
#include <com/sun/star/ucb/CommandInfo.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
@@ -619,10 +620,11 @@ void SAL_CALL ODefinitionContainer::propertyChange( const PropertyChangeEvent& e
implRemove( sOldName );
implAppend( sNewName, xContent );
}
- catch(const Exception&)
+ catch(const Exception& ex)
{
- DBG_UNHANDLED_EXCEPTION("dbaccess");
- throw RuntimeException();
+ css::uno::Any anyEx = cppu::getCaughtException();
+ throw css::lang::WrappedTargetRuntimeException( ex.Message,
+ nullptr, anyEx );
}
m_bInPropertyChange = false;
}
diff --git a/dbaccess/source/filter/xml/xmlfilter.cxx b/dbaccess/source/filter/xml/xmlfilter.cxx
index 906a2bd69272..11b424901bc2 100644
--- a/dbaccess/source/filter/xml/xmlfilter.cxx
+++ b/dbaccess/source/filter/xml/xmlfilter.cxx
@@ -324,11 +324,13 @@ bool ODBFilter::implImport( const Sequence< PropertyValue >& rDescriptor )
if (!sStreamRelPath.isEmpty())
xStorage = xStorage->openStorageElement(sStreamRelPath, embed::ElementModes::READ);
}
+ catch (const RuntimeException&)
+ {
+ throw;
+ }
catch (const Exception&)
{
Any aError = ::cppu::getCaughtException();
- if (aError.isExtractableTo(::cppu::UnoType<RuntimeException>::get()))
- throw;
throw lang::WrappedTargetRuntimeException(OUString(), *this, aError);
}
}
diff --git a/dbaccess/source/ui/control/tabletree.cxx b/dbaccess/source/ui/control/tabletree.cxx
index 31428879bf09..a285b7f9675a 100644
--- a/dbaccess/source/ui/control/tabletree.cxx
+++ b/dbaccess/source/ui/control/tabletree.cxx
@@ -167,10 +167,9 @@ void OTableTreeListBox::UpdateTableList( const Reference< XConnection >& _rxConn
}
catch(Exception&)
{
+ css::uno::Any anyEx = cppu::getCaughtException();
// a non-SQLException exception occurred ... simply throw an SQLException
- SQLException aInfo;
- aInfo.Message = sCurrentActionError;
- throw aInfo;
+ throw SQLException(sCurrentActionError, nullptr, "", 0, anyEx);
}
UpdateTableList( _rxConnection, sTables, sViews );
diff --git a/dbaccess/source/ui/dlg/DbAdminImpl.cxx b/dbaccess/source/ui/dlg/DbAdminImpl.cxx
index 49cdf5756619..0cce73ebbba6 100644
--- a/dbaccess/source/ui/dlg/DbAdminImpl.cxx
+++ b/dbaccess/source/ui/dlg/DbAdminImpl.cxx
@@ -388,11 +388,11 @@ Reference< XDriver > ODbDataSourceAdministrationHelper::getDriver(const OUString
{
xDriverManager.set( ConnectionPool::create( getORB() ) );
}
- catch (const Exception& e)
+ catch (const Exception&)
{
+ css::uno::Any anyEx = cppu::getCaughtException();
// wrap the exception into an SQLException
- SQLException aSQLWrapper(e.Message, getORB(), "S1000", 0, Any());
- throw SQLException(sCurrentActionError, getORB(), "S1000", 0, makeAny(aSQLWrapper));
+ throw SQLException(sCurrentActionError, getORB(), "S1000", 0, anyEx);
}
Reference< XDriver > xDriver = xDriverManager->getDriverByURL(_sURL);