Merge pull request #1597 from jaubourg/master

allow null image as source for assignment and copy constructor
This commit is contained in:
John Cupitt 2020-03-27 06:01:25 +00:00 committed by GitHub
commit 0d6f987976
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 10 deletions

View File

@ -81,7 +81,7 @@ public:
} }
#endif /*VIPS_DEBUG_VERBOSE*/ #endif /*VIPS_DEBUG_VERBOSE*/
if( !steal ) { if( !steal && vobject ) {
#ifdef VIPS_DEBUG_VERBOSE #ifdef VIPS_DEBUG_VERBOSE
printf( " reffing object\n" ); printf( " reffing object\n" );
#endif /*VIPS_DEBUG_VERBOSE*/ #endif /*VIPS_DEBUG_VERBOSE*/
@ -98,22 +98,22 @@ public:
VObject( const VObject &a ) : VObject( const VObject &a ) :
vobject( a.vobject ) vobject( a.vobject )
{ {
g_assert( VIPS_IS_OBJECT( a.vobject ) ); g_assert( !vobject ||
VIPS_IS_OBJECT( vobject ) );
#ifdef VIPS_DEBUG_VERBOSE #ifdef VIPS_DEBUG_VERBOSE
printf( "VObject copy constructor, obj = %p\n", printf( "VObject copy constructor, obj = %p\n",
vobject ); vobject );
printf( " reffing object\n" ); printf( " reffing object\n" );
#endif /*VIPS_DEBUG_VERBOSE*/ #endif /*VIPS_DEBUG_VERBOSE*/
g_object_ref( vobject ); if( vobject )
g_object_ref( vobject );
} }
// assignment ... we must delete the old ref // assignment ... we must delete the old ref
// old can be NULL, new must not be NULL // old can be NULL, new must not be NULL
VObject &operator=( const VObject &a ) VObject &operator=( const VObject &a )
{ {
VipsObject *old_vobject;
#ifdef VIPS_DEBUG_VERBOSE #ifdef VIPS_DEBUG_VERBOSE
printf( "VObject assignment\n" ); printf( "VObject assignment\n" );
printf( " reffing %p\n", a.vobject ); printf( " reffing %p\n", a.vobject );
@ -122,16 +122,16 @@ public:
g_assert( !vobject || g_assert( !vobject ||
VIPS_IS_OBJECT( vobject ) ); VIPS_IS_OBJECT( vobject ) );
g_assert( a.vobject && g_assert( !a.vobject ||
VIPS_IS_OBJECT( a.vobject ) ); VIPS_IS_OBJECT( a.vobject ) );
// delete the old ref at the end ... otherwise "a = a;" could // delete the old ref at the end ... otherwise "a = a;" could
// unref before reffing again // unref before reffing again
old_vobject = vobject; if( a.vobject )
g_object_ref( a.vobject );
if( vobject )
g_object_unref( vobject );
vobject = a.vobject; vobject = a.vobject;
g_object_ref( vobject );
if( old_vobject )
g_object_unref( old_vobject );
return( *this ); return( *this );
} }