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:
@@ -37,7 +37,7 @@ class Attribs
|
||||
Attribs* Clone( void) const
|
||||
{ Attribs* pAttribs ;
|
||||
// alloco oggetto
|
||||
pAttribs = new(std::nothrow) Attribs ;
|
||||
pAttribs = new( std::nothrow) Attribs ;
|
||||
if ( pAttribs != nullptr)
|
||||
*pAttribs = *this ;
|
||||
return pAttribs ; }
|
||||
|
||||
Binary file not shown.
+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 ;
|
||||
}
|
||||
|
||||
+4
-2
@@ -2776,8 +2776,10 @@ GeomDB::CopyAllInfoFrom( int nId, int nSouId)
|
||||
return false ;
|
||||
|
||||
// copio tutte le Info
|
||||
if ( pGdbObj != pGdbObjSou && pGdbObjSou->m_pAttribs != nullptr)
|
||||
return pGdbObj->m_pAttribs->CopyAllInfoFrom( *(pGdbObjSou->m_pAttribs)) ;
|
||||
if ( pGdbObj != pGdbObjSou && pGdbObjSou->m_pAttribs != nullptr) {
|
||||
pGdbObj->GetSafeAttribs() ;
|
||||
return ( pGdbObj->m_pAttribs != nullptr && pGdbObj->m_pAttribs->CopyAllInfoFrom( *(pGdbObjSou->m_pAttribs))) ;
|
||||
}
|
||||
else
|
||||
return true ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user