Skip to content

Commit befe732

Browse files
committed
Fix new[]/delete missmatches and memory leaks found by clang's ASAN
Sometimes memory was allocated with new[] but freed with delete instead of delete[], which is wrong. And there were some small memory leaks, too. Furtunately clang's AddressSanitizer detected all that so I could easily fix it. (There seem to be some more small memory leaks which are harder to fix, though)
1 parent 9950a57 commit befe732

File tree

7 files changed

+17
-11
lines changed

7 files changed

+17
-11
lines changed

neo/d3xp/Pvs.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -861,20 +861,20 @@ idPVS::Shutdown
861861
*/
862862
void idPVS::Shutdown( void ) {
863863
if ( connectedAreas ) {
864-
delete connectedAreas;
864+
delete[] connectedAreas;
865865
connectedAreas = NULL;
866866
}
867867
if ( areaQueue ) {
868-
delete areaQueue;
868+
delete[] areaQueue;
869869
areaQueue = NULL;
870870
}
871871
if ( areaPVS ) {
872-
delete areaPVS;
872+
delete[] areaPVS;
873873
areaPVS = NULL;
874874
}
875875
if ( currentPVS ) {
876876
for ( int i = 0; i < MAX_CURRENT_PVS; i++ ) {
877-
delete currentPVS[i].pvs;
877+
delete[] currentPVS[i].pvs;
878878
currentPVS[i].pvs = NULL;
879879
}
880880
}

neo/framework/FileSystem.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1344,7 +1344,7 @@ pack_t *idFileSystemLocal::LoadZipFile( const char *zipfile ) {
13441344
unzClose(uf);
13451345
delete[] buildBuffer;
13461346
delete pack;
1347-
1347+
Mem_Free( fs_headerLongs );
13481348
return NULL;
13491349
}
13501350
}

neo/game/Pvs.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -861,20 +861,20 @@ idPVS::Shutdown
861861
*/
862862
void idPVS::Shutdown( void ) {
863863
if ( connectedAreas ) {
864-
delete connectedAreas;
864+
delete[] connectedAreas;
865865
connectedAreas = NULL;
866866
}
867867
if ( areaQueue ) {
868-
delete areaQueue;
868+
delete[] areaQueue;
869869
areaQueue = NULL;
870870
}
871871
if ( areaPVS ) {
872-
delete areaPVS;
872+
delete[] areaPVS;
873873
areaPVS = NULL;
874874
}
875875
if ( currentPVS ) {
876876
for ( int i = 0; i < MAX_CURRENT_PVS; i++ ) {
877-
delete currentPVS[i].pvs;
877+
delete[] currentPVS[i].pvs;
878878
currentPVS[i].pvs = NULL;
879879
}
880880
}

neo/idlib/math/Polynomial.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ class idPolynomial {
5353
explicit idPolynomial( float a, float b, float c, float d );
5454
explicit idPolynomial( float a, float b, float c, float d, float e );
5555

56+
~idPolynomial() // DG: don't leak coefficient's memory!
57+
{
58+
Mem_Free16( coefficient );
59+
}
60+
5661
float operator[]( int index ) const;
5762
float & operator[]( int index );
5863

neo/sys/posix/posix_net.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ void Sys_InitNetworking(void)
318318
if (num_interfaces >= MAX_INTERFACES)
319319
break;
320320
}
321+
freeifaddrs(ifap);
321322
}
322323

323324
/*

neo/ui/Winvar.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ idWinVar::idWinVar() {
4242
}
4343

4444
idWinVar::~idWinVar() {
45-
delete name;
45+
delete[] name;
4646
name = NULL;
4747
}
4848

neo/ui/Winvar.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class idWinVar {
5151
return "";
5252
}
5353
void SetName(const char *_name) {
54-
delete []name;
54+
delete[] name;
5555
name = NULL;
5656
if (_name) {
5757
name = new char[strlen(_name)+1];

0 commit comments

Comments
 (0)