From 3a35a1e1256d0ac48aa9ff7f2293e9e3adab5674 Mon Sep 17 00:00:00 2001 From: Andre Wagner Date: Tue, 12 May 2026 09:23:43 -0500 Subject: [PATCH] . --- lib/stack.c | 6 ++++-- test/tests.c | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/stack.c b/lib/stack.c index baf9bc3..14af6db 100644 --- a/lib/stack.c +++ b/lib/stack.c @@ -53,7 +53,7 @@ static size_t stack_top_fp(Stack* s) static TYC_RESULT stack_peek(Stack* s, VALUE* v_out) { - if (s->stack_n < stack_top_fp(s)) + if (s->stack_n <= stack_top_fp(s)) return T_ERR_STACK_UNDERFLOW; if (v_out) *v_out = s->stack[s->stack_n - 1]; @@ -77,9 +77,11 @@ static size_t stack_len(Stack* s) static TYC_RESULT stack_at(Stack* s, int32_t key, VALUE* v) { if (key >= 0) { + if (key >= s->stack_n) + return T_ERR_STACK_ACCESS_OUT_OF_RANGE; *v = s->stack[stack_top_fp(s) + key]; } else { - if (stack_top_fp(s) + s->stack_n + key < 0) + if ((int) stack_top_fp(s) + (int) s->stack_n + key < 0) return T_ERR_STACK_ACCESS_OUT_OF_RANGE; *v = s->stack[s->stack_n + key]; } diff --git a/test/tests.c b/test/tests.c index 2f6e67a..62c56ff 100644 --- a/test/tests.c +++ b/test/tests.c @@ -36,6 +36,9 @@ int main() assert(stack_at(&s, -1, &v) == T_OK); assert(value_integer(v) == 30); assert(stack_at(&s, -2, &v) == T_OK); assert(value_integer(v) == 20); + assert(stack_at(&s, 3, &v) == T_ERR_STACK_ACCESS_OUT_OF_RANGE); + assert(stack_at(&s, -4, &v) == T_ERR_STACK_ACCESS_OUT_OF_RANGE); + assert(stack_pop(&s, NULL) == T_OK); assert(stack_pop(&s, NULL) == T_OK); assert(stack_at(&s, -1, &v) == T_OK); assert(value_integer(v) == 10);