From 1e518c4c82211613b8752e92d41eca8205e8fe29 Mon Sep 17 00:00:00 2001 From: samsonium Date: Mon, 19 Oct 2026 20:11:48 +0300 Subject: [PATCH] fix: sanitizer checks fix (iteration 3 - final) --- src/compiler/main.c | 28 ++++++++++++++++++++++++++++ src/vm/fzl_vm.c | 4 ++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/compiler/main.c b/src/compiler/main.c index 305a83c..d6b534b 100644 --- a/src/compiler/main.c +++ b/src/compiler/main.c @@ -15,9 +15,15 @@ int main(int argc, char **argv) { fzl_options_t *opts = fzl_mkoptions(argc, argv); if (!opts) + { + fzl_freeoptions(opts); return -1; + } else if (!opts->should_continue) + { + fzl_freeoptions(opts); return 0; + } if (opts->verbose) printf("%s> analyze\n-> reading file...%s", FZL_CDEBUG, FZL_CRST); @@ -28,6 +34,8 @@ int main(int argc, char **argv) char *lasterr = fzl_linked_geterror(); if (lasterr[0]) printf("%sError%s: %s\n", FZL_CERROR, FZL_CRST, lasterr); + fzl_freeoptions(opts); + fzl_freelinked(linked); return -1; } @@ -38,6 +46,8 @@ int main(int argc, char **argv) char *lasterr = fzl_linked_geterror(); if (lasterr[0]) printf("%sError%s: %s\n", FZL_CERROR, FZL_CRST, lasterr); + fzl_freeoptions(opts); + fzl_freelinked(linked); return -1; } @@ -53,6 +63,9 @@ int main(int argc, char **argv) if (result != 0) { printf("%sError%s: %s\n", FZL_CERROR, FZL_CRST, fzl_reader_geterror()); + fzl_freeoptions(opts); + fzl_freelinked(linked); + fzl_freereader(rd); return -1; } @@ -87,6 +100,10 @@ int main(int argc, char **argv) if (result != 0) { printf("%sError%s: %s\n", FZL_CERROR, FZL_CRST, fzl_parser_geterror()); + fzl_freeoptions(opts); + fzl_freeparser(parser); + fzl_freereader(rd); + fzl_freelinked(linked); return -1; } @@ -103,6 +120,11 @@ int main(int argc, char **argv) if (result != 0) { printf("%sError%s: %s\n", FZL_CERROR, FZL_CRST, fzl_walker_geterror()); + fzl_freeoptions(opts); + fzl_freewalker(walker); + fzl_freeparser(parser); + fzl_freereader(rd); + fzl_freelinked(linked); return -1; } @@ -144,6 +166,12 @@ int main(int argc, char **argv) if (result != 0) { printf("%sError%s: %s\n", FZL_CERROR, FZL_CRST, fzl_writer_geterror()); + fzl_freeoptions(opts); + fzl_freewriter(writer); + fzl_freewalker(walker); + fzl_freeparser(parser); + fzl_freereader(rd); + fzl_freelinked(linked); return -1; } diff --git a/src/vm/fzl_vm.c b/src/vm/fzl_vm.c index 07827f8..ce026e1 100644 --- a/src/vm/fzl_vm.c +++ b/src/vm/fzl_vm.c @@ -193,7 +193,7 @@ void print_object(fzl_vm_object_t *obj) else if (arg.type == FZL_TYPE_UINT) printf("uint(%lu)", arg.as.u); else if (arg.type == FZL_TYPE_BOOL) - printf("bool(%b)", arg.as.b); + printf("bool(%s)", arg.as.b ? "true" : "false"); else if (arg.type == FZL_TYPE_NULL) printf(""); else if (arg.type == FZL_TYPE_OBJECT) @@ -833,7 +833,7 @@ int fzl_vm_run(fzl_vm_t *vm) else if (arg.type == FZL_TYPE_UINT) printf("%lu\n", arg.as.u); else if (arg.type == FZL_TYPE_BOOL) - printf("%b\n", arg.as.b); + printf("%s\n", arg.as.b ? "true" : "false"); else if (arg.type == FZL_TYPE_NULL) printf("\n"); else if (arg.type == FZL_TYPE_OBJECT)