fix memory leak introduced by putting setjmp in the wrong place
This commit is contained in:
parent
1ffd8d9276
commit
6bffacefaf
1 changed files with 5 additions and 6 deletions
|
|
@ -348,12 +348,7 @@ bool h_svm_action_clear_to_mark(HArena *arena, HSVMContext *ctx, void* env) {
|
||||||
// Glue regex backend to rest of system
|
// Glue regex backend to rest of system
|
||||||
|
|
||||||
bool h_compile_regex(HRVMProg *prog, const HParser *parser) {
|
bool h_compile_regex(HRVMProg *prog, const HParser *parser) {
|
||||||
if (setjmp(prog->except)) {
|
return parser->vtable->compile_to_rvm(prog, parser->env);
|
||||||
return false;
|
|
||||||
}
|
|
||||||
bool ret = parser->vtable->compile_to_rvm(prog, parser->env);
|
|
||||||
memset(prog->except, 0, sizeof(prog->except));
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void h_regex_free(HParser *parser) {
|
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->insns = NULL;
|
||||||
prog->actions = NULL;
|
prog->actions = NULL;
|
||||||
prog->allocator = mm__;
|
prog->allocator = mm__;
|
||||||
|
if (setjmp(prog->except)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (!h_compile_regex(prog, parser)) {
|
if (!h_compile_regex(prog, parser)) {
|
||||||
h_free(prog->insns);
|
h_free(prog->insns);
|
||||||
h_free(prog->actions);
|
h_free(prog->actions);
|
||||||
h_free(prog);
|
h_free(prog);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
memset(prog->except, 0, sizeof(prog->except));
|
||||||
h_rvm_insert_insn(prog, RVM_ACCEPT, 0);
|
h_rvm_insert_insn(prog, RVM_ACCEPT, 0);
|
||||||
parser->backend_data = prog;
|
parser->backend_data = prog;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue