|
@@ -374,15 +374,18 @@ void SQCollectable::RemoveFromChain(SQCollectable **chain,SQCollectable *c)
|
|
|
SQChar* SQSharedState::GetScratchPad(SQInteger size)
|
|
SQChar* SQSharedState::GetScratchPad(SQInteger size)
|
|
|
{
|
|
{
|
|
|
SQInteger newsize;
|
|
SQInteger newsize;
|
|
|
- if(size>0) {
|
|
|
|
|
- if(_scratchpadsize < size) {
|
|
|
|
|
- newsize = size + (size>>1);
|
|
|
|
|
- _scratchpad = (SQChar *)SQ_REALLOC(_scratchpad,_scratchpadsize,newsize);
|
|
|
|
|
|
|
+ if (size > 0) {
|
|
|
|
|
+ if (_scratchpadsize < size) {
|
|
|
|
|
+ newsize = size + (size >> 1);
|
|
|
|
|
+ newsize = sq_max(newsize, size); //check for overflow
|
|
|
|
|
+ _scratchpad = (SQChar*)SQ_REALLOC(_scratchpad, _scratchpadsize, newsize);
|
|
|
_scratchpadsize = newsize;
|
|
_scratchpadsize = newsize;
|
|
|
|
|
|
|
|
- }else if(_scratchpadsize >= (size<<5)) {
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (_scratchpadsize >= (size << 5)) {
|
|
|
newsize = _scratchpadsize >> 1;
|
|
newsize = _scratchpadsize >> 1;
|
|
|
- _scratchpad = (SQChar *)SQ_REALLOC(_scratchpad,_scratchpadsize,newsize);
|
|
|
|
|
|
|
+ newsize = sq_max(newsize, size); //check for overflow
|
|
|
|
|
+ _scratchpad = (SQChar*)SQ_REALLOC(_scratchpad, _scratchpadsize, newsize);
|
|
|
_scratchpadsize = newsize;
|
|
_scratchpadsize = newsize;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|