diff --git a/kernel/linebuffer.cpp b/kernel/linebuffer.cpp index c51e0204..2003a314 100644 --- a/kernel/linebuffer.cpp +++ b/kernel/linebuffer.cpp @@ -66,9 +66,12 @@ bool LineBuffer::Push(uint32_t unicode) size_t leadingavai = bufferlength-bufferoffset; size_t leading = (leadingavai < bufferused) ? leadingavai : bufferused; size_t trailing = bufferused - leading; - memcpy(newbuffer, buffer + bufferoffset, leading * elemsize); - memcpy(newbuffer + leading, buffer, trailing * elemsize); - delete[] buffer; + if ( buffer ) + { + memcpy(newbuffer, buffer + bufferoffset, leading * elemsize); + memcpy(newbuffer + leading, buffer, trailing * elemsize); + delete[] buffer; + } buffer = newbuffer; bufferlength = newbufferlength; bufferoffset = 0; diff --git a/kernel/ptable.cpp b/kernel/ptable.cpp index de729405..332e5d62 100644 --- a/kernel/ptable.cpp +++ b/kernel/ptable.cpp @@ -72,8 +72,12 @@ pid_t ProcessTable::Allocate(Process* process) struct ptable_entry* new_entries = new struct ptable_entry[new_length]; if ( !new_entries ) return -1; - memcpy(new_entries, entries, sizeof(struct ptable_entry) * entries_length); - delete[] entries; + if ( entries ) + { + size_t old_size = sizeof(struct ptable_entry) * entries_length; + memcpy(new_entries, entries, old_size); + delete[] entries; + } entries = new_entries; entries_length = new_length; } diff --git a/kernel/video.cpp b/kernel/video.cpp index bbafd812..4737f15e 100644 --- a/kernel/video.cpp +++ b/kernel/video.cpp @@ -61,8 +61,12 @@ bool RegisterDevice(const char* name, VideoDevice* device) DeviceEntry* newdevices = new DeviceEntry[newdevices_length]; if ( !newdevices ) return false; - memcpy(newdevices, devices, sizeof(*devices) * num_devices); - delete[] devices; devices = newdevices; + if ( devices ) + { + memcpy(newdevices, devices, sizeof(*devices) * num_devices); + delete[] devices; + } + devices = newdevices; devices_length = devices_length; }