From 574877eba7c61912c112658997470407e79419e7 Mon Sep 17 00:00:00 2001 From: Marco Cetica Date: Mon, 10 Nov 2025 12:16:18 +0100 Subject: [PATCH] Fixed heap overflow caused by `vector_resize` --- .gitignore | 3 +++ Makefile | 2 +- src/vector.c | 11 ++++++----- tests/test_vector | Bin 0 -> 64976 bytes tests/test_vector.c | 4 ++-- usage.c | 10 +++++----- 6 files changed, 17 insertions(+), 13 deletions(-) create mode 100755 tests/test_vector diff --git a/.gitignore b/.gitignore index 845cda6..240d53e 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,6 @@ dkms.conf # debug information files *.dwo + +# Visual Studio Code +.vscode/ diff --git a/Makefile b/Makefile index 6f61b53..0b1e840 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ CC = gcc CFLAGS = -Wall -Wextra -Werror -pedantic-errors -fstack-protector-strong \ -fsanitize=address -fsanitize=undefined -fstack-clash-protection \ - -Wwrite-strings -std=c99 + -Wwrite-strings -g -std=c99 SRC_DIR = src OBJ_DIR = obj diff --git a/src/vector.c b/src/vector.c index 9053494..8eb8d85 100644 --- a/src/vector.c +++ b/src/vector.c @@ -70,18 +70,18 @@ vector_result_t vector_new(size_t size, size_t data_size) { vector_result_t vector_resize(vector_t *vector) { vector_result_t result = {0}; - size_t old_capacity = vector->capacity; - vector->capacity = (old_capacity > 0 ? ((old_capacity * 3) / 2) : 1); + const size_t old_capacity = vector->capacity; + const size_t new_capacity = old_capacity > 0 ? old_capacity * 2 : 1; // Check for stack overflow errors - if (vector->capacity > SIZE_MAX / vector->data_size) { + if (new_capacity > SIZE_MAX / vector->data_size) { result.status = VECTOR_ERR_OVERFLOW; SET_MSG(result, "Exceeded maximum size while resizing vector"); return result; } - void *new_elements = realloc(vector->elements, (vector->capacity * vector->data_size)); + void *new_elements = realloc(vector->elements, new_capacity * vector->data_size); if (new_elements == NULL) { result.status = VECTOR_ERR_ALLOCATE; SET_MSG(result, "Failed to reallocate memory for vector"); @@ -90,6 +90,7 @@ vector_result_t vector_resize(vector_t *vector) { } vector->elements = new_elements; + vector->capacity = new_capacity; result.status = VECTOR_OK; SET_MSG(result, "Vector successfully resized"); @@ -184,7 +185,7 @@ vector_result_t vector_push(vector_t *vector, void *value) { } // Check whether vector has enough space available - if (vector->capacity == vector->size) { + if (vector->size == vector->capacity) { result = vector_resize(vector); if (result.status != VECTOR_OK) { return result; diff --git a/tests/test_vector b/tests/test_vector new file mode 100755 index 0000000000000000000000000000000000000000..c9066fd93a29669f4a64f9b25b037a060f5a07ef GIT binary patch literal 64976 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 literal 0 HcmV?d00001 diff --git a/tests/test_vector.c b/tests/test_vector.c index 0101851..4dc3032 100644 --- a/tests/test_vector.c +++ b/tests/test_vector.c @@ -55,7 +55,7 @@ void test_vector_push() { // Trigger vector reallocation void test_vector_push_realloc() { - vector_result_t res = vector_new(2, sizeof(int)); + vector_result_t res = vector_new(1, sizeof(int)); assert(res.status == VECTOR_OK); vector_t *v = res.value.vector; @@ -66,7 +66,7 @@ void test_vector_push_realloc() { } assert(vector_size(v) == 5); - assert(vector_capacity(v) >= 5); + assert(vector_capacity(v) > 5); vector_destroy(v); } diff --git a/usage.c b/usage.c index 3454724..c0f561c 100644 --- a/usage.c +++ b/usage.c @@ -54,8 +54,8 @@ vector_order_t cmp_int_desc(const void *x, const void *y) { } int vector_usage() { - // Create a vector of 5 integers - vector_result_t res = vector_new(5, sizeof(int)); + // Create a vector of 3 integers + vector_result_t res = vector_new(3, sizeof(int)); if (res.status != VECTOR_OK) { printf("Error while creating vector: %s\n", res.message); @@ -64,8 +64,8 @@ int vector_usage() { vector_t *vector = res.value.vector; - // Push some values - for (int idx = 0; idx <= 5; idx++) { + // Push some values to trigger reallocation + for (int idx = 0; idx < 5; idx++) { vector_result_t add_res = vector_push(vector, &idx); if (add_res.status != VECTOR_OK) { printf("Error while adding elements: %s\n", add_res.message); @@ -76,7 +76,7 @@ int vector_usage() { // Print vector size and capacity printf("Vector size (should be 5): %zu\n", vector_size(vector)); - printf("Vector capacity (should be >= 5): %zu\n\n", vector_capacity(vector)); + printf("Vector capacity (should be > 5): %zu\n\n", vector_capacity(vector)); // Print the whole vector for (size_t idx = 0; idx < vector_size(vector); idx++) {