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:
Dario Sassi
2020-01-21 10:58:56 +00:00
parent 5f497c3f28
commit 8bf083146d
4 changed files with 19 additions and 27 deletions
+14 -24
View File
@@ -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 ;
}