aboutsummaryrefslogtreecommitdiff
path: root/lib/cbit/vec.c
diff options
context:
space:
mode:
authorcomex2015-03-01 23:07:15 -0500
committercomex2015-03-01 23:07:15 -0500
commit7f24621bec0b0a5b3cab9ec2dfc68929a2d49d25 (patch)
tree7c227bfa4d8010e23b726eed8efb6bc51746e3f5 /lib/cbit/vec.c
parentseems to work (diff)
downloadsubstitute-7f24621bec0b0a5b3cab9ec2dfc68929a2d49d25.tar.gz
A number of critical fixes painstakingly discovered in the slowest way possible.
Diffstat (limited to 'lib/cbit/vec.c')
-rw-r--r--lib/cbit/vec.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/cbit/vec.c b/lib/cbit/vec.c
index 21038a2..2f875ff 100644
--- a/lib/cbit/vec.c
+++ b/lib/cbit/vec.c
@@ -1,12 +1,16 @@
#include "cbit/vec.h"
#include <stdio.h>
+#include <stdlib.h>
void vec_realloc_internal(struct vec_internal *vi, size_t new_capacity,
size_t esize) {
+ if (new_capacity == 0)
+ abort();
size_t new_size = safe_mul(new_capacity, esize);
if (vi->els == vi->storage) {
void *new = malloc(new_size);
- memcpy(new, vi->els, vi->capacity * esize);
+ size_t min_cap = new_capacity < vi->capacity ? new_capacity : vi->capacity;
+ memcpy(new, vi->els, min_cap * esize);
vi->els = new;
} else {
vi->els = realloc(vi->els, new_size);