EgtGeomKernel 2.2a5 :
- corretta GdbObj::CopyAttribsFrom per mancata liberazione memoria prima di nuova assegnazione - riportata la stessa correzione in GdbObj::CopyTextureDataFrom e GdbObj::CopyUserObjFrom - corretta GeomDB::CopyAllInfoFrom per verificare e garantire allocazione Attribs.
This commit is contained in:
+14
-24
@@ -101,6 +101,10 @@ GdbObj::CopyAttribsFrom( const GdbObj* pSou)
|
||||
// se l'oggetto sorgente non esiste
|
||||
if ( pSou == nullptr)
|
||||
return false ;
|
||||
// cancello gli attributi originali
|
||||
if ( m_pAttribs != nullptr)
|
||||
delete m_pAttribs ;
|
||||
m_pAttribs = nullptr ;
|
||||
// copio gli attributi
|
||||
if ( pSou->m_pAttribs != nullptr) {
|
||||
m_pAttribs = pSou->m_pAttribs->Clone() ;
|
||||
@@ -112,12 +116,6 @@ GdbObj::CopyAttribsFrom( const GdbObj* pSou)
|
||||
// marcatura sempre disabilitata
|
||||
m_pAttribs->ResetMark() ;
|
||||
}
|
||||
// altrimenti li cancello
|
||||
else {
|
||||
if ( m_pAttribs != nullptr)
|
||||
delete m_pAttribs ;
|
||||
m_pAttribs = nullptr ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
@@ -129,18 +127,16 @@ GdbObj::CopyTextureDataFrom( const GdbObj* pSou)
|
||||
// se l'oggetto sorgente non esiste
|
||||
if ( pSou == nullptr)
|
||||
return false ;
|
||||
// cancello i dati di texture originali
|
||||
if ( m_pTxrData != nullptr)
|
||||
delete m_pTxrData ;
|
||||
m_pTxrData = nullptr ;
|
||||
// copio texture data
|
||||
if ( pSou->m_pTxrData != nullptr) {
|
||||
m_pTxrData = pSou->m_pTxrData->Clone() ;
|
||||
if ( m_pTxrData == nullptr)
|
||||
return false ;
|
||||
}
|
||||
// altrimenti li cancello
|
||||
else {
|
||||
if ( m_pTxrData != nullptr)
|
||||
delete m_pTxrData ;
|
||||
m_pTxrData = nullptr ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
@@ -152,6 +148,10 @@ GdbObj::CopyUserObjFrom( const GdbObj* pSou)
|
||||
// se l'oggetto sorgente non esiste
|
||||
if ( pSou == nullptr)
|
||||
return false ;
|
||||
// copio UserObj originale
|
||||
if ( m_pUserObj != nullptr)
|
||||
delete m_pUserObj ;
|
||||
m_pUserObj = nullptr ;
|
||||
// copio UserObj
|
||||
if ( pSou->m_pUserObj != nullptr) {
|
||||
m_pUserObj = pSou->m_pUserObj->Clone() ;
|
||||
@@ -159,12 +159,6 @@ GdbObj::CopyUserObjFrom( const GdbObj* pSou)
|
||||
return false ;
|
||||
m_pUserObj->SetOwner( m_nId, m_pGDB) ;
|
||||
}
|
||||
// altrimenti lo cancello
|
||||
else {
|
||||
if ( m_pUserObj != nullptr)
|
||||
delete m_pUserObj ;
|
||||
m_pUserObj = nullptr ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
@@ -367,12 +361,8 @@ GdbObj::LoadAttribs( NgeReader& ngeIn)
|
||||
Attribs*
|
||||
GdbObj::GetSafeAttribs( void)
|
||||
{
|
||||
if ( m_pAttribs == nullptr) {
|
||||
Attribs* pAttribs = new( nothrow) Attribs ;
|
||||
if ( pAttribs == nullptr)
|
||||
return nullptr ;
|
||||
m_pAttribs = pAttribs ;
|
||||
}
|
||||
if ( m_pAttribs == nullptr)
|
||||
m_pAttribs = new( nothrow) Attribs ;
|
||||
|
||||
return m_pAttribs ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user