From 6bffacefaf8c6f37f46fb1ff388d3bb20e58c9b4 Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" <mlp@thesmartpolitenerd.com> Date: Sun, 2 Aug 2015 21:46:57 +0200 Subject: [PATCH] fix memory leak introduced by putting setjmp in the wrong place --- src/backends/regex.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/backends/regex.c b/src/backends/regex.c index cba50e65..5fe3aa0b 100644 --- a/src/backends/regex.c +++ b/src/backends/regex.c @@ -348,12 +348,7 @@ bool h_svm_action_clear_to_mark(HArena *arena, HSVMContext *ctx, void* env) { // Glue regex backend to rest of system bool h_compile_regex(HRVMProg *prog, const HParser *parser) { - if (setjmp(prog->except)) { - return false; - } - bool ret = parser->vtable->compile_to_rvm(prog, parser->env); - memset(prog->except, 0, sizeof(prog->except)); - return ret; + return parser->vtable->compile_to_rvm(prog, parser->env); } static void h_regex_free(HParser *parser) { @@ -375,12 +370,16 @@ static int h_regex_compile(HAllocator *mm__, HParser* parser, const void* params prog->insns = NULL; prog->actions = NULL; prog->allocator = mm__; + if (setjmp(prog->except)) { + return false; + } if (!h_compile_regex(prog, parser)) { h_free(prog->insns); h_free(prog->actions); h_free(prog); return 2; } + memset(prog->except, 0, sizeof(prog->except)); h_rvm_insert_insn(prog, RVM_ACCEPT, 0); parser->backend_data = prog; return 0; -- GitLab