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

This commit is contained in:
Jonas 'Sortie' Termansen 2015-11-22 00:40:12 +01:00
parent ef36a94912
commit 32feba2709
3 changed files with 18 additions and 7 deletions

View File

@ -66,9 +66,12 @@ bool LineBuffer::Push(uint32_t unicode)
size_t leadingavai = bufferlength-bufferoffset; size_t leadingavai = bufferlength-bufferoffset;
size_t leading = (leadingavai < bufferused) ? leadingavai : bufferused; size_t leading = (leadingavai < bufferused) ? leadingavai : bufferused;
size_t trailing = bufferused - leading; size_t trailing = bufferused - leading;
if ( buffer )
{
memcpy(newbuffer, buffer + bufferoffset, leading * elemsize); memcpy(newbuffer, buffer + bufferoffset, leading * elemsize);
memcpy(newbuffer + leading, buffer, trailing * elemsize); memcpy(newbuffer + leading, buffer, trailing * elemsize);
delete[] buffer; delete[] buffer;
}
buffer = newbuffer; buffer = newbuffer;
bufferlength = newbufferlength; bufferlength = newbufferlength;
bufferoffset = 0; bufferoffset = 0;

View File

@ -72,8 +72,12 @@ pid_t ProcessTable::Allocate(Process* process)
struct ptable_entry* new_entries = new struct ptable_entry[new_length]; struct ptable_entry* new_entries = new struct ptable_entry[new_length];
if ( !new_entries ) if ( !new_entries )
return -1; return -1;
memcpy(new_entries, entries, sizeof(struct ptable_entry) * entries_length); if ( entries )
{
size_t old_size = sizeof(struct ptable_entry) * entries_length;
memcpy(new_entries, entries, old_size);
delete[] entries; delete[] entries;
}
entries = new_entries; entries = new_entries;
entries_length = new_length; entries_length = new_length;
} }

View File

@ -61,8 +61,12 @@ bool RegisterDevice(const char* name, VideoDevice* device)
DeviceEntry* newdevices = new DeviceEntry[newdevices_length]; DeviceEntry* newdevices = new DeviceEntry[newdevices_length];
if ( !newdevices ) if ( !newdevices )
return false; return false;
if ( devices )
{
memcpy(newdevices, devices, sizeof(*devices) * num_devices); memcpy(newdevices, devices, sizeof(*devices) * num_devices);
delete[] devices; devices = newdevices; delete[] devices;
}
devices = newdevices;
devices_length = devices_length; devices_length = devices_length;
} }