Fix PS2Keyboard memcpy(dest, NULL, 0) undefined behavior.
This commit is contained in:
parent
421f907055
commit
f2eb347e9f
|
@ -210,6 +210,8 @@ bool PS2Keyboard::PushKey(int key)
|
||||||
int* newqueue = new int[newqueuelength];
|
int* newqueue = new int[newqueuelength];
|
||||||
if ( !newqueue )
|
if ( !newqueue )
|
||||||
return false;
|
return false;
|
||||||
|
if ( queue )
|
||||||
|
{
|
||||||
size_t elemsize = sizeof(*queue);
|
size_t elemsize = sizeof(*queue);
|
||||||
size_t leadingavai = queuelength-queueoffset;
|
size_t leadingavai = queuelength-queueoffset;
|
||||||
size_t leading = (leadingavai < queueused) ? leadingavai : queueused;
|
size_t leading = (leadingavai < queueused) ? leadingavai : queueused;
|
||||||
|
@ -217,6 +219,7 @@ bool PS2Keyboard::PushKey(int key)
|
||||||
memcpy(newqueue, queue + queueoffset, leading * elemsize);
|
memcpy(newqueue, queue + queueoffset, leading * elemsize);
|
||||||
memcpy(newqueue + leading, queue, trailing * elemsize);
|
memcpy(newqueue + leading, queue, trailing * elemsize);
|
||||||
delete[] queue;
|
delete[] queue;
|
||||||
|
}
|
||||||
queue = newqueue;
|
queue = newqueue;
|
||||||
queuelength = newqueuelength;
|
queuelength = newqueuelength;
|
||||||
queueoffset = 0;
|
queueoffset = 0;
|
||||||
|
|
Loading…
Reference in New Issue