Fix a set of odd null on new checks PVS V668

This commit is contained in:
Marek Roszko 2022-02-05 14:32:00 -05:00
parent 290354e3f6
commit 1c77eb14d7
2 changed files with 164 additions and 66 deletions

View File

@ -303,9 +303,11 @@ void BOARD_OUTLINE::readOutlines( std::istream& aBoardFile, IDF3::IDF_VERSION aI
// outline may have a Loop Index of 0 or 1 // outline may have a Loop Index of 0 or 1
if( tmp == 0 || tmp == 1 ) if( tmp == 0 || tmp == 1 )
{ {
op = new IDF_OUTLINE; try
{
if( op == nullptr ) op = new IDF_OUTLINE;
}
catch( std::bad_alloc& )
{ {
clearOutlines(); clearOutlines();
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__,
@ -344,9 +346,11 @@ void BOARD_OUTLINE::readOutlines( std::istream& aBoardFile, IDF3::IDF_VERSION aI
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, ostr.str() ) ); throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, ostr.str() ) );
} }
op = new IDF_OUTLINE; try
{
if( op == nullptr ) op = new IDF_OUTLINE;
}
catch( std::bad_alloc& )
{ {
clearOutlines(); clearOutlines();
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__,
@ -399,9 +403,11 @@ void BOARD_OUTLINE::readOutlines( std::istream& aBoardFile, IDF3::IDF_VERSION aI
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, ostr.str() ) ); throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, ostr.str() ) );
} }
op = new IDF_OUTLINE; try
{
if( op == nullptr ) op = new IDF_OUTLINE;
}
catch( std::bad_alloc& )
{ {
clearOutlines(); clearOutlines();
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__,
@ -610,16 +616,18 @@ void BOARD_OUTLINE::readOutlines( std::istream& aBoardFile, IDF3::IDF_VERSION aI
curPt.x = x; curPt.x = x;
curPt.y = y; curPt.y = y;
if( ang > -MIN_ANG && ang < MIN_ANG ) try
{ {
sp = new IDF_SEGMENT( prePt, curPt ); if( ang > -MIN_ANG && ang < MIN_ANG )
{
sp = new IDF_SEGMENT( prePt, curPt );
}
else
{
sp = new IDF_SEGMENT( prePt, curPt, ang, false );
}
} }
else catch( std::bad_alloc& )
{
sp = new IDF_SEGMENT( prePt, curPt, ang, false );
}
if( sp == nullptr )
{ {
clearOutlines(); clearOutlines();
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__,
@ -3578,14 +3586,20 @@ bool IDF3_COMP_OUTLINE::CreateDefaultOutline( const std::string& aGeom, const st
a = da / 2.0; a = da / 2.0;
IDF_POINT p1, p2; IDF_POINT p1, p2;
IDF_OUTLINE* ol = new IDF_OUTLINE;
IDF_SEGMENT* sp; IDF_SEGMENT* sp;
IDF_OUTLINE* ol;
p1.x = 1.5 * cos( a ); p1.x = 1.5 * cos( a );
p1.y = 1.5 * sin( a ); p1.y = 1.5 * sin( a );
if( ol == nullptr ) try
{
ol = new IDF_OUTLINE;
}
catch( std::bad_alloc& )
{
return false; return false;
}
for( int i = 0; i < 10; ++i ) for( int i = 0; i < 10; ++i )
{ {
@ -3600,9 +3614,11 @@ bool IDF3_COMP_OUTLINE::CreateDefaultOutline( const std::string& aGeom, const st
p2.y = 1.5 * sin( a ); p2.y = 1.5 * sin( a );
} }
sp = new IDF_SEGMENT( p1, p2 ); try
{
if( sp == nullptr ) sp = new IDF_SEGMENT( p1, p2 );
}
catch( std::bad_alloc& )
{ {
Clear(); Clear();
return false; return false;
@ -3617,9 +3633,11 @@ bool IDF3_COMP_OUTLINE::CreateDefaultOutline( const std::string& aGeom, const st
p2.x = 1.5 * cos( a ); p2.x = 1.5 * cos( a );
p2.y = 1.5 * sin( a ); p2.y = 1.5 * sin( a );
sp = new IDF_SEGMENT( p1, p2 ); try
{
if( sp == nullptr ) sp = new IDF_SEGMENT( p1, p2 );
}
catch( std::bad_alloc& )
{ {
Clear(); Clear();
return false; return false;

View File

@ -616,9 +616,13 @@ bool IDF3_COMP_OUTLINE_DATA::readPlaceData( std::istream &aBoardFile,
if( parent == nullptr ) if( parent == nullptr )
{ {
IDF3_COMPONENT* cp = new IDF3_COMPONENT( aBoard ); IDF3_COMPONENT* cp;
if( cp == nullptr ) try
{
cp = new IDF3_COMPONENT( aBoard );
}
catch( std::bad_alloc& )
{ {
outline = nullptr; outline = nullptr;
@ -981,11 +985,16 @@ IDF_DRILL_DATA* IDF3_COMPONENT::AddDrill( double aDia, double aXpos, double aYpo
const std::string& aHoleType, const std::string& aHoleType,
IDF3::KEY_OWNER aOwner ) IDF3::KEY_OWNER aOwner )
{ {
IDF_DRILL_DATA* dp = new IDF_DRILL_DATA( aDia, aXpos, aYpos, aPlating, IDF_DRILL_DATA* dp = nullptr;
refdes, aHoleType, aOwner );
if( dp == nullptr ) try
{
dp = new IDF_DRILL_DATA( aDia, aXpos, aYpos, aPlating, refdes, aHoleType, aOwner );
}
catch( std::bad_alloc& )
{
return nullptr; return nullptr;
}
drills.push_back( dp ); drills.push_back( dp );
@ -1988,11 +1997,19 @@ void IDF3_BOARD::readBrdSection( std::istream& aBoardFile, IDF3::FILE_STATE& aBo
"* Violation of specification: expecting .BOARD_OUTLINE, have " "* Violation of specification: expecting .BOARD_OUTLINE, have "
".OTHER_OUTLINE" ) ); ".OTHER_OUTLINE" ) );
OTHER_OUTLINE* op = new OTHER_OUTLINE( this ); OTHER_OUTLINE* op = nullptr;
if( op == nullptr ) try
{
op = new OTHER_OUTLINE( this );
}
catch( std::bad_alloc& )
{
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__,
"could not create OTHER_OUTLINE object" ) ); "could not create OTHER_OUTLINE object" ) );
}
if( op == nullptr )
op->SetUnit( unit ); op->SetUnit( unit );
op->readData( aBoardFile, iline, idfVer ); op->readData( aBoardFile, iline, idfVer );
@ -2034,11 +2051,17 @@ void IDF3_BOARD::readBrdSection( std::istream& aBoardFile, IDF3::FILE_STATE& aBo
"* Violation of specification: expecting .BOARD_OUTLINE, have " "* Violation of specification: expecting .BOARD_OUTLINE, have "
".ROUTE_OUTLINE" ) ); ".ROUTE_OUTLINE" ) );
ROUTE_OUTLINE* op = new ROUTE_OUTLINE( this ); ROUTE_OUTLINE* op = nullptr;
if( op == nullptr ) try
{
op = new ROUTE_OUTLINE( this );
}
catch( std::bad_alloc& )
{
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__,
"could not create ROUTE_OUTLINE object" ) ); "could not create ROUTE_OUTLINE object" ) );
}
op->SetUnit( unit ); op->SetUnit( unit );
op->readData( aBoardFile, iline, idfVer ); op->readData( aBoardFile, iline, idfVer );
@ -2068,11 +2091,17 @@ void IDF3_BOARD::readBrdSection( std::istream& aBoardFile, IDF3::FILE_STATE& aBo
"* Violation of specification: expecting .BOARD_OUTLINE, have " "* Violation of specification: expecting .BOARD_OUTLINE, have "
".PLACE_OUTLINE" ) ); ".PLACE_OUTLINE" ) );
PLACE_OUTLINE* op = new PLACE_OUTLINE( this ); PLACE_OUTLINE* op = nullptr;
if( op == nullptr ) try
{
op = new PLACE_OUTLINE( this );
}
catch( std::bad_alloc& )
{
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__,
"could not create PLACE_OUTLINE object" ) ); "could not create PLACE_OUTLINE object" ) );
}
op->SetUnit( unit ); op->SetUnit( unit );
op->readData( aBoardFile, iline, idfVer ); op->readData( aBoardFile, iline, idfVer );
@ -2102,11 +2131,17 @@ void IDF3_BOARD::readBrdSection( std::istream& aBoardFile, IDF3::FILE_STATE& aBo
"* Violation of specification: expecting .BOARD_OUTLINE, have " "* Violation of specification: expecting .BOARD_OUTLINE, have "
".ROUTE_KEEPOUT" ) ); ".ROUTE_KEEPOUT" ) );
ROUTE_KO_OUTLINE* op = new ROUTE_KO_OUTLINE( this ); ROUTE_KO_OUTLINE* op = nullptr;
if( op == nullptr ) try
{
op = new ROUTE_KO_OUTLINE( this );
}
catch( std::bad_alloc& )
{
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__,
"could not create ROUTE_KEEPOUT object" ) ); "could not create ROUTE_KEEPOUT object" ) );
}
op->SetUnit( unit ); op->SetUnit( unit );
op->readData( aBoardFile, iline, idfVer ); op->readData( aBoardFile, iline, idfVer );
@ -2136,11 +2171,17 @@ void IDF3_BOARD::readBrdSection( std::istream& aBoardFile, IDF3::FILE_STATE& aBo
"* Violation of specification: expecting .BOARD_OUTLINE, have " "* Violation of specification: expecting .BOARD_OUTLINE, have "
".VIA_KEEPOUT" ) ); ".VIA_KEEPOUT" ) );
VIA_KO_OUTLINE* op = new VIA_KO_OUTLINE( this ); VIA_KO_OUTLINE* op = nullptr;
if( op == nullptr ) try
{
op = new VIA_KO_OUTLINE( this );
}
catch( std::bad_alloc& )
{
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__,
"could not create VIA_KEEPOUT object" ) ); "could not create VIA_KEEPOUT object" ) );
}
op->SetUnit( unit ); op->SetUnit( unit );
op->readData( aBoardFile, iline, idfVer ); op->readData( aBoardFile, iline, idfVer );
@ -2170,11 +2211,16 @@ void IDF3_BOARD::readBrdSection( std::istream& aBoardFile, IDF3::FILE_STATE& aBo
"* Violation of specification: expecting .BOARD_OUTLINE, have " "* Violation of specification: expecting .BOARD_OUTLINE, have "
".PLACE_KEEPOUT" ) ); ".PLACE_KEEPOUT" ) );
PLACE_KO_OUTLINE* op = new PLACE_KO_OUTLINE( this ); PLACE_KO_OUTLINE* op = nullptr;
try
if( op == nullptr ) {
op = new PLACE_KO_OUTLINE( this );
}
catch( std::bad_alloc& )
{
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__,
"could not create PLACE_KEEPOUT object" ) ); "could not create PLACE_KEEPOUT object" ) );
}
op->SetUnit( unit ); op->SetUnit( unit );
op->readData( aBoardFile, iline, idfVer ); op->readData( aBoardFile, iline, idfVer );
@ -2204,11 +2250,17 @@ void IDF3_BOARD::readBrdSection( std::istream& aBoardFile, IDF3::FILE_STATE& aBo
"* Violation of specification: expecting .BOARD_OUTLINE, have " "* Violation of specification: expecting .BOARD_OUTLINE, have "
".PLACE_REGION" ) ); ".PLACE_REGION" ) );
GROUP_OUTLINE* op = new GROUP_OUTLINE( this ); GROUP_OUTLINE* op = nullptr;
if( op == nullptr ) try
{
op = new GROUP_OUTLINE( this );
}
catch( std::bad_alloc& )
{
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__,
"could not create PLACE_REGION object" ) ); "could not create PLACE_REGION object" ) );
}
op->SetUnit( unit ); op->SetUnit( unit );
op->readData( aBoardFile, iline, idfVer ); op->readData( aBoardFile, iline, idfVer );
@ -2428,11 +2480,16 @@ void IDF3_BOARD::readLibSection( std::istream& aLibFile, IDF3::FILE_STATE& aLibS
int idx = 0; int idx = 0;
bool quoted = false; bool quoted = false;
std::string token; std::string token;
IDF3_COMP_OUTLINE *pout = new IDF3_COMP_OUTLINE( this ); IDF3_COMP_OUTLINE* pout = nullptr;
if( !pout ) try
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, {
"\n* memory allocation failure" ) ); pout = new IDF3_COMP_OUTLINE( this );
}
catch( std::bad_alloc& )
{
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, "\n* memory allocation failure" ) );
}
while( aLibFile.good() ) while( aLibFile.good() )
{ {
@ -3436,11 +3493,18 @@ IDF_DRILL_DATA* IDF3_BOARD::AddBoardDrill( double aDia, double aXpos, double aYp
const std::string& aHoleType, const std::string& aHoleType,
IDF3::KEY_OWNER aOwner ) IDF3::KEY_OWNER aOwner )
{ {
IDF_DRILL_DATA* drill = new IDF_DRILL_DATA( aDia, aXpos, aYpos, aPlating, IDF_DRILL_DATA* drill = nullptr;
"BOARD", aHoleType, aOwner );
if( drill != nullptr ) try
board_drills.push_back( drill ); {
drill = new IDF_DRILL_DATA( aDia, aXpos, aYpos, aPlating, "BOARD", aHoleType, aOwner );
}
catch( std::bad_alloc& )
{
return nullptr;
}
board_drills.push_back( drill );
return drill; return drill;
} }
@ -3587,9 +3651,13 @@ bool IDF3_BOARD::AddSlot( double aWidth, double aLength, double aOrientation, do
pt[3].x = c[0].x + dca2; pt[3].x = c[0].x + dca2;
pt[3].y = c[0].y + dsa2; pt[3].y = c[0].y + dsa2;
IDF_OUTLINE* outline = new IDF_OUTLINE; IDF_OUTLINE* outline = nullptr;
if( outline == nullptr ) try
{
outline = new IDF_OUTLINE;
}
catch( std::bad_alloc& )
{ {
ostringstream ostr; ostringstream ostr;
ostr << __FILE__ << ":" << __LINE__ << ":" << __FUNCTION__ << "():\n"; ostr << __FILE__ << ":" << __LINE__ << ":" << __FUNCTION__ << "():\n";
@ -3666,9 +3734,12 @@ IDF_DRILL_DATA* IDF3_BOARD::addCompDrill( double aDia, double aXpos, double aYpo
if( ref == components.end() ) if( ref == components.end() )
{ {
// create the item // create the item
IDF3_COMPONENT* comp = new IDF3_COMPONENT( this ); IDF3_COMPONENT* comp = nullptr;
try
if( comp == nullptr ) {
comp = new IDF3_COMPONENT( this );
}
catch( std::bad_alloc& )
{ {
ostringstream ostr; ostringstream ostr;
ostr << __FILE__ << ":" << __LINE__ << ":" << __FUNCTION__ << "():\n"; ostr << __FILE__ << ":" << __LINE__ << ":" << __FUNCTION__ << "():\n";
@ -3724,9 +3795,12 @@ IDF_DRILL_DATA* IDF3_BOARD::addCompDrill( IDF_DRILL_DATA* aDrilledHole )
if( ref == components.end() ) if( ref == components.end() )
{ {
// create the item // create the item
IDF3_COMPONENT* comp = new IDF3_COMPONENT( this ); IDF3_COMPONENT* comp;
try
if( comp == nullptr ) {
comp = new IDF3_COMPONENT( this );
}
catch( std::bad_alloc& )
{ {
ostringstream ostr; ostringstream ostr;
ostr << __FILE__ << ":" << __LINE__ << ":" << __FUNCTION__ << "():\n"; ostr << __FILE__ << ":" << __LINE__ << ":" << __FUNCTION__ << "():\n";
@ -3913,9 +3987,13 @@ IDF3_COMP_OUTLINE* IDF3_BOARD::GetComponentOutline( const wxString& aFullFileNam
if( itm != uidFileList.end() ) if( itm != uidFileList.end() )
return GetComponentOutline( itm->second ); return GetComponentOutline( itm->second );
IDF3_COMP_OUTLINE* cp = new IDF3_COMP_OUTLINE( this ); IDF3_COMP_OUTLINE* cp = nullptr;
if( cp == nullptr ) try
{
cp = new IDF3_COMP_OUTLINE( this );
}
catch( std::bad_alloc& )
{ {
ostringstream ostr; ostringstream ostr;
ostr << __FILE__ << ":" << __LINE__ << ":" << __FUNCTION__ << "(): \n"; ostr << __FILE__ << ":" << __LINE__ << ":" << __FUNCTION__ << "(): \n";
@ -4115,9 +4193,11 @@ IDF3_COMP_OUTLINE* IDF3_BOARD::GetInvalidOutline( const std::string& aGeomName,
if( cp != nullptr ) if( cp != nullptr )
return cp; return cp;
cp = new IDF3_COMP_OUTLINE( this ); try
{
if( cp == nullptr ) cp = new IDF3_COMP_OUTLINE( this );
}
catch( std::bad_alloc& )
{ {
ostringstream ostr; ostringstream ostr;
ostr << __FILE__ << ":" << __LINE__ << ":" << __FUNCTION__ << "(): "; ostr << __FILE__ << ":" << __LINE__ << ":" << __FUNCTION__ << "(): ";