Fix PS2Keyboard memcpy(dest, NULL, 0) undefined behavior.

This commit is contained in:
Jonas 'Sortie' Termansen 2015-12-12 22:52:40 +01:00
parent 421f907055
commit f2eb347e9f
1 changed files with 10 additions and 7 deletions

View File

@ -210,13 +210,16 @@ bool PS2Keyboard::PushKey(int key)
int* newqueue = new int[newqueuelength]; int* newqueue = new int[newqueuelength];
if ( !newqueue ) if ( !newqueue )
return false; return false;
size_t elemsize = sizeof(*queue); if ( queue )
size_t leadingavai = queuelength-queueoffset; {
size_t leading = (leadingavai < queueused) ? leadingavai : queueused; size_t elemsize = sizeof(*queue);
size_t trailing = queueused - leading; size_t leadingavai = queuelength-queueoffset;
memcpy(newqueue, queue + queueoffset, leading * elemsize); size_t leading = (leadingavai < queueused) ? leadingavai : queueused;
memcpy(newqueue + leading, queue, trailing * elemsize); size_t trailing = queueused - leading;
delete[] queue; memcpy(newqueue, queue + queueoffset, leading * elemsize);
memcpy(newqueue + leading, queue, trailing * elemsize);
delete[] queue;
}
queue = newqueue; queue = newqueue;
queuelength = newqueuelength; queuelength = newqueuelength;
queueoffset = 0; queueoffset = 0;