diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-12-02 09:46:08 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-12-02 09:46:08 +0900 |
| commit | 826fe1bc36a298f682de51ea29d949dcc15e42ab (patch) | |
| tree | 32440662e15408657d8b95696aa9e8007d684850 /mrbgems/mruby-compiler/core/codegen.c | |
| parent | dd0715fd581d6dd56b11198b098df3ec02491968 (diff) | |
| download | mruby-826fe1bc36a298f682de51ea29d949dcc15e42ab.tar.gz mruby-826fe1bc36a298f682de51ea29d949dcc15e42ab.zip | |
Fixed memory leaks from `codegen_error`.
Diffstat (limited to 'mrbgems/mruby-compiler/core/codegen.c')
| -rw-r--r-- | mrbgems/mruby-compiler/core/codegen.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index bef631ba7..4c67988e4 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -116,8 +116,15 @@ codegen_error(codegen_scope *s, const char *message) while (s->prev) { codegen_scope *tmp = s->prev; mrb_free(s->mrb, s->iseq); + for (int i=0; i<s->irep->plen; i++) { + mrb_pool_value *pv = &s->pool[i]; + if ((pv->tt & 0x3) == IREP_TT_STR) { + mrb_free(s->mrb, (void*)pv->u.str); + } + } mrb_free(s->mrb, s->pool); mrb_free(s->mrb, s->syms); + mrb_free(s->mrb, s->catch_table); if (s->reps) { /* copied from mrb_irep_free() in state.c */ for (i=0; i<s->irep->rlen; i++) { |
