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];
if ( !newqueue )
return false;
size_t elemsize = sizeof(*queue);
size_t leadingavai = queuelength-queueoffset;
size_t leading = (leadingavai < queueused) ? leadingavai : queueused;
size_t trailing = queueused - leading;
memcpy(newqueue, queue + queueoffset, leading * elemsize);
memcpy(newqueue + leading, queue, trailing * elemsize);
delete[] queue;
if ( queue )
{
size_t elemsize = sizeof(*queue);
size_t leadingavai = queuelength-queueoffset;
size_t leading = (leadingavai < queueused) ? leadingavai : queueused;
size_t trailing = queueused - leading;
memcpy(newqueue, queue + queueoffset, leading * elemsize);
memcpy(newqueue + leading, queue, trailing * elemsize);
delete[] queue;
}
queue = newqueue;
queuelength = newqueuelength;
queueoffset = 0;