Fix overflow issues when computing new size for the array.

This commit is contained in:
Patrick Pelissier committed 2017-08-06 22:39:42 +02:00
1 parent fb7eed3c15
commit 14c50a5b9a
1 file changed
+21 -1
+21 -1
View File
@@ -151,8 +151,12 @@
if (M_UNLIKELY (d == s)) return; \
if (s->size > d->alloc) { \
size_t alloc = ARRAYI_INC_ALLOC_SIZE(oplist, s->size); \
if (M_UNLIKELY (alloc <= d->alloc)) { \
M_MEMORY_FULL(sizeof (type) * alloc); \
return ; \
} \
type *ptr = M_GET_REALLOC oplist (type, d->ptr, alloc); \
if (ptr == NULL) { \
if (M_UNLIKELY (ptr == NULL)) { \
M_MEMORY_FULL(sizeof (type) * alloc); \
return ; \
} \
@@ -222,6 +226,10 @@
if (M_UNLIKELY (v->size >= v->alloc)) { \
assert(v->size == v->alloc); \
size_t alloc = ARRAYI_INC_ALLOC_SIZE(oplist, v->alloc); \
if (M_UNLIKELY (alloc <= v->alloc)) { \
M_MEMORY_FULL(sizeof (type) * alloc); \
return NULL; \
} \
assert (alloc > v->size); \
type *ptr = M_GET_REALLOC oplist (type, v->ptr, alloc); \
if (M_UNLIKELY (ptr == NULL) ) { \
@@ -265,6 +273,10 @@
if (M_UNLIKELY (v->size >= v->alloc) ) { \
assert(v->size == v->alloc); \
size_t alloc = ARRAYI_INC_ALLOC_SIZE(oplist, v->alloc); \
if (M_UNLIKELY (alloc <= v->alloc)) { \
M_MEMORY_FULL(sizeof (type) * alloc); \
return ; \
} \
assert (alloc > v->size); \
type *ptr = M_GET_REALLOC oplist (type, v->ptr, alloc); \
if (M_UNLIKELY (ptr == NULL) ) { \
@@ -343,6 +355,10 @@
/* Increase size of array */ \
if (M_UNLIKELY (size > v->alloc) ) { \
size_t alloc = ARRAYI_INC_ALLOC_SIZE(oplist, size) ; \
if (M_UNLIKELY (alloc <= v->alloc)) { \
M_MEMORY_FULL(sizeof (type) * alloc); \
return ; \
} \
type *ptr = M_GET_REALLOC oplist (type, v->ptr, alloc); \
if (M_UNLIKELY (ptr == NULL) ) { \
M_MEMORY_FULL(sizeof (type) * alloc); \
@@ -421,6 +437,10 @@
size_t size = v->size + num; \
if (size > v->alloc) { \
size_t alloc = ARRAYI_INC_ALLOC_SIZE(oplist, size) ; \
if (M_UNLIKELY (alloc <= v->alloc)) { \
M_MEMORY_FULL(sizeof (type) * alloc); \
return ; \
} \
type *ptr = M_GET_REALLOC oplist (type, v->ptr, alloc); \
if (M_UNLIKELY (ptr == NULL) ) { \
M_MEMORY_FULL(sizeof (type) * alloc); \