Detect integer overflows when filling buffers
This commit is contained in:
parent
f5673f6250
commit
41b454e7c4
|
@ -101,7 +101,11 @@ int buffer_set(Buffer * buffer, size_t size, char * data)
|
||||||
/* buffer_set_data */
|
/* buffer_set_data */
|
||||||
int buffer_set_data(Buffer * buffer, size_t offset, char * data, size_t size)
|
int buffer_set_data(Buffer * buffer, size_t offset, char * data, size_t size)
|
||||||
{
|
{
|
||||||
if(offset + size > buffer->size) /* FIXME integer overflow */
|
size_t s = offset + size;
|
||||||
|
|
||||||
|
if(s < offset && s < size)
|
||||||
|
return error_set_code(-ERANGE, "%s", strerror(ERANGE));
|
||||||
|
if(offset + size > buffer->size)
|
||||||
if(buffer_set_size(buffer, offset + size) != 0)
|
if(buffer_set_size(buffer, offset + size) != 0)
|
||||||
return -1;
|
return -1;
|
||||||
memcpy(&buffer->data[offset], data, size);
|
memcpy(&buffer->data[offset], data, size);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user