mirror of
https://github.com/dhewm/dhewm3.git
synced 2025-02-28 06:43:39 +00:00
idClass::operator new() and delete: align to intptr_t
to avoid unaligned reads from class members of idClass or its derived classes
This commit is contained in:
parent
af13c20614
commit
fb3f0cc2b4
2 changed files with 24 additions and 24 deletions
|
@ -444,10 +444,10 @@ idClass::new
|
|||
#endif
|
||||
|
||||
void * idClass::operator new( size_t s ) {
|
||||
int *p;
|
||||
intptr_t *p;
|
||||
|
||||
s += sizeof( int );
|
||||
p = (int *)Mem_Alloc( s );
|
||||
s += sizeof( intptr_t );
|
||||
p = (intptr_t *)Mem_Alloc( s );
|
||||
*p = s;
|
||||
memused += s;
|
||||
numobjects++;
|
||||
|
@ -455,7 +455,7 @@ void * idClass::operator new( size_t s ) {
|
|||
#ifdef ID_DEBUG_UNINITIALIZED_MEMORY
|
||||
unsigned int *ptr = (unsigned int *)p;
|
||||
int size = s;
|
||||
assert( ( size & 3 ) == 0 );
|
||||
assert( ( size & (sizeof(intptr_t) - 1) ) == 0 );
|
||||
size >>= 3;
|
||||
for ( int i = 1; i < size; i++ ) {
|
||||
ptr[i] = 0xcdcdcdcd;
|
||||
|
@ -466,10 +466,10 @@ void * idClass::operator new( size_t s ) {
|
|||
}
|
||||
|
||||
void * idClass::operator new( size_t s, int, int, char *, int ) {
|
||||
int *p;
|
||||
intptr_t *p;
|
||||
|
||||
s += sizeof( int );
|
||||
p = (int *)Mem_Alloc( s );
|
||||
s += sizeof( intptr_t );
|
||||
p = (intptr_t *)Mem_Alloc( s );
|
||||
*p = s;
|
||||
memused += s;
|
||||
numobjects++;
|
||||
|
@ -477,7 +477,7 @@ void * idClass::operator new( size_t s, int, int, char *, int ) {
|
|||
#ifdef ID_DEBUG_UNINITIALIZED_MEMORY
|
||||
unsigned int *ptr = (unsigned int *)p;
|
||||
int size = s;
|
||||
assert( ( size & 3 ) == 0 );
|
||||
assert( ( size & (sizeof(intptr_t) - 1) ) == 0 );
|
||||
size >>= 3;
|
||||
for ( int i = 1; i < size; i++ ) {
|
||||
ptr[i] = 0xcdcdcdcd;
|
||||
|
@ -497,10 +497,10 @@ idClass::delete
|
|||
================
|
||||
*/
|
||||
void idClass::operator delete( void *ptr ) {
|
||||
int *p;
|
||||
intptr_t *p;
|
||||
|
||||
if ( ptr ) {
|
||||
p = ( ( int * )ptr ) - 1;
|
||||
p = ( ( intptr_t * )ptr ) - 1;
|
||||
memused -= *p;
|
||||
numobjects--;
|
||||
Mem_Free( p );
|
||||
|
@ -508,10 +508,10 @@ void idClass::operator delete( void *ptr ) {
|
|||
}
|
||||
|
||||
void idClass::operator delete( void *ptr, int, int, char *, int ) {
|
||||
int *p;
|
||||
intptr_t *p;
|
||||
|
||||
if ( ptr ) {
|
||||
p = ( ( int * )ptr ) - 1;
|
||||
p = ( ( intptr_t * )ptr ) - 1;
|
||||
memused -= *p;
|
||||
numobjects--;
|
||||
Mem_Free( p );
|
||||
|
|
|
@ -444,10 +444,10 @@ idClass::new
|
|||
#endif
|
||||
|
||||
void * idClass::operator new( size_t s ) {
|
||||
int *p;
|
||||
intptr_t *p;
|
||||
|
||||
s += sizeof( int );
|
||||
p = (int *)Mem_Alloc( s );
|
||||
s += sizeof( intptr_t );
|
||||
p = (intptr_t *)Mem_Alloc( s );
|
||||
*p = s;
|
||||
memused += s;
|
||||
numobjects++;
|
||||
|
@ -455,7 +455,7 @@ void * idClass::operator new( size_t s ) {
|
|||
#ifdef ID_DEBUG_UNINITIALIZED_MEMORY
|
||||
unsigned int *ptr = (unsigned int *)p;
|
||||
int size = s;
|
||||
assert( ( size & 3 ) == 0 );
|
||||
assert( ( size & (sizeof(intptr_t) - 1) ) == 0 );
|
||||
size >>= 3;
|
||||
for ( int i = 1; i < size; i++ ) {
|
||||
ptr[i] = 0xcdcdcdcd;
|
||||
|
@ -466,10 +466,10 @@ void * idClass::operator new( size_t s ) {
|
|||
}
|
||||
|
||||
void * idClass::operator new( size_t s, int, int, char *, int ) {
|
||||
int *p;
|
||||
intptr_t *p;
|
||||
|
||||
s += sizeof( int );
|
||||
p = (int *)Mem_Alloc( s );
|
||||
s += sizeof( intptr_t );
|
||||
p = (intptr_t *)Mem_Alloc( s );
|
||||
*p = s;
|
||||
memused += s;
|
||||
numobjects++;
|
||||
|
@ -477,7 +477,7 @@ void * idClass::operator new( size_t s, int, int, char *, int ) {
|
|||
#ifdef ID_DEBUG_UNINITIALIZED_MEMORY
|
||||
unsigned int *ptr = (unsigned int *)p;
|
||||
int size = s;
|
||||
assert( ( size & 3 ) == 0 );
|
||||
assert( ( size & (sizeof(intptr_t) - 1) ) == 0 );
|
||||
size >>= 3;
|
||||
for ( int i = 1; i < size; i++ ) {
|
||||
ptr[i] = 0xcdcdcdcd;
|
||||
|
@ -497,10 +497,10 @@ idClass::delete
|
|||
================
|
||||
*/
|
||||
void idClass::operator delete( void *ptr ) {
|
||||
int *p;
|
||||
intptr_t *p;
|
||||
|
||||
if ( ptr ) {
|
||||
p = ( ( int * )ptr ) - 1;
|
||||
p = ( ( intptr_t * )ptr ) - 1;
|
||||
memused -= *p;
|
||||
numobjects--;
|
||||
Mem_Free( p );
|
||||
|
@ -508,10 +508,10 @@ void idClass::operator delete( void *ptr ) {
|
|||
}
|
||||
|
||||
void idClass::operator delete( void *ptr, int, int, char *, int ) {
|
||||
int *p;
|
||||
intptr_t *p;
|
||||
|
||||
if ( ptr ) {
|
||||
p = ( ( int * )ptr ) - 1;
|
||||
p = ( ( intptr_t * )ptr ) - 1;
|
||||
memused -= *p;
|
||||
numobjects--;
|
||||
Mem_Free( p );
|
||||
|
|
Loading…
Reference in a new issue