From 9475ba38e7d6eda1014fc18a60e6b3680d6bf99e Mon Sep 17 00:00:00 2001 From: Elijah Cohen Date: Fri, 19 Sep 2025 01:59:54 +0000 Subject: [PATCH] fixed a memory error in strcat --- src/builtins/strings.c | 2 +- src/test.c | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/builtins/strings.c b/src/builtins/strings.c index b067d6b..e94d67b 100644 --- a/src/builtins/strings.c +++ b/src/builtins/strings.c @@ -48,7 +48,7 @@ Sexpr* s_strcat(Sexpr* b, Sexpr* rest, Sexpr* env) { #endif // typecheck char* fs = unquote(fst)->value.str; char* ss = unquote(snd)->value.str; - char* out = malloc(sizeof(char)*(strlen(fs)+strlen(ss))); + char* out = malloc(sizeof(char)*(strlen(fs)+strlen(ss)+1)); strcpy(out, fs); strcat(out, ss); sexpr_free(snd); diff --git a/src/test.c b/src/test.c index a273ec2..8f91df0 100644 --- a/src/test.c +++ b/src/test.c @@ -382,6 +382,13 @@ void eval_tests() { } +void diagnose_strcat() { + Sexpr* env = init_dict(); + env = load_env(env); + assert_eq(env, "strcat \"hell\" \"o\"", "\"hello\""); + sexpr_free(env); +} + void many_asserts() { Sexpr* env = init_dict(); env = load_env(env); @@ -440,6 +447,8 @@ void many_asserts() { assert_eq(env, "strexpand \"test\"", "list \"t\" \"e\" \"s\" \"t\""); assert_eq(env, "substr \"oo\" \"looopy", "list 2 3"); assert_eq(env, "strtok \" /\" \"this is/a test\"", "list \"this\" \"is\" \"a\" \"test\""); + assert_eq(env, "strlen \"hey\"", "3"); + assert_eq(env, "strcat \"hey \" \"there\"", "\"hey there\""); printf("meta\n"); assert_eq(env, "utob 512", "+"); @@ -536,6 +545,7 @@ void run_tests(){ //test_string_parsing(); //eval_tests(); many_asserts(); + //diagnose_strcat(); //memtest_eval(); //mem_testing(); //mem_parser(); -- 2.39.5