From f2eb347e9f025c2bbf7a80bcc26ff5221b31b8c2 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Sat, 12 Dec 2015 22:52:40 +0100 Subject: [PATCH] Fix PS2Keyboard memcpy(dest, NULL, 0) undefined behavior. --- kernel/kb/ps2.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/kernel/kb/ps2.cpp b/kernel/kb/ps2.cpp index a751f70f..ea3e0a2d 100644 --- a/kernel/kb/ps2.cpp +++ b/kernel/kb/ps2.cpp @@ -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;