You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by hd...@apache.org on 2013/01/29 10:58:12 UTC
svn commit: r1439808 -
/openoffice/trunk/main/cppu/inc/com/sun/star/uno/Reference.hxx
Author: hdu
Date: Tue Jan 29 09:58:11 2013
New Revision: 1439808
URL: http://svn.apache.org/viewvc?rev=1439808&view=rev
Log:
fix css::uno's throwing Reference constructors
The destructor of the Reference class depends on its _pInterface member being set,
but some constructors skip this when an exception was thrown. Always initializing
them properly while avoiding a rethrow is cheap and safe.
Fixed-By: Herbert Dürr, Andre Fischer
Modified:
openoffice/trunk/main/cppu/inc/com/sun/star/uno/Reference.hxx
Modified: openoffice/trunk/main/cppu/inc/com/sun/star/uno/Reference.hxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/cppu/inc/com/sun/star/uno/Reference.hxx?rev=1439808&r1=1439807&r2=1439808&view=diff
==============================================================================
--- openoffice/trunk/main/cppu/inc/com/sun/star/uno/Reference.hxx (original)
+++ openoffice/trunk/main/cppu/inc/com/sun/star/uno/Reference.hxx Tue Jan 29 09:58:11 2013
@@ -171,18 +171,21 @@ inline Reference< interface_type >::Refe
template< class interface_type >
inline Reference< interface_type >::Reference( const BaseReference & rRef, UnoReference_QueryThrow ) SAL_THROW( (RuntimeException) )
{
+ _pInterface = NULL;
_pInterface = iquery_throw( rRef.get() );
}
//__________________________________________________________________________________________________
template< class interface_type >
inline Reference< interface_type >::Reference( XInterface * pInterface, UnoReference_QueryThrow ) SAL_THROW( (RuntimeException) )
{
+ _pInterface = NULL;
_pInterface = iquery_throw( pInterface );
}
//__________________________________________________________________________________________________
template< class interface_type >
inline Reference< interface_type >::Reference( const Any & rAny, UnoReference_QueryThrow ) SAL_THROW( (RuntimeException) )
{
+ _pInterface = NULL;
_pInterface = iquery_throw( typelib_TypeClass_INTERFACE == rAny.pType->eTypeClass
? static_cast< XInterface * >( rAny.pReserved ) : 0 );
}
@@ -190,12 +193,14 @@ inline Reference< interface_type >::Refe
template< class interface_type >
inline Reference< interface_type >::Reference( const Reference< interface_type > & rRef, UnoReference_SetThrow ) SAL_THROW( (RuntimeException) )
{
+ _pInterface = NULL;
_pInterface = iset_throw( rRef.get() );
}
//__________________________________________________________________________________________________
template< class interface_type >
inline Reference< interface_type >::Reference( interface_type * pInterface, UnoReference_SetThrow ) SAL_THROW( (RuntimeException) )
{
+ _pInterface = NULL;
_pInterface = iset_throw( pInterface );
}
#endif