summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorCarson McDonald <[email protected]>2013-05-13 10:15:37 -0400
committerCarson McDonald <[email protected]>2013-05-13 10:15:37 -0400
commit546d1626e373cc72eb031a1129fb6d55c3aba6c1 (patch)
treec563189333b44016ca57b40ce7b9775480a73f2d
parent077213c5eb6817fd044ddf319df3593706ae6653 (diff)
downloadmruby-546d1626e373cc72eb031a1129fb6d55c3aba6c1.tar.gz
mruby-546d1626e373cc72eb031a1129fb6d55c3aba6c1.zip
Fix early free of irep->filename
-rw-r--r--src/codegen.c8
-rw-r--r--src/load.c3
-rw-r--r--src/state.c1
3 files changed, 8 insertions, 4 deletions
diff --git a/src/codegen.c b/src/codegen.c
index 38328c669..057b634a5 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -2403,6 +2403,8 @@ scope_finish(codegen_scope *s)
{
mrb_state *mrb = s->mrb;
mrb_irep *irep = s->irep;
+ size_t fname_len;
+ char *fname;
irep->flags = 0;
if (s->iseq) {
@@ -2418,7 +2420,11 @@ scope_finish(codegen_scope *s)
irep->pool = (mrb_value *)codegen_realloc(s, irep->pool, sizeof(mrb_value)*irep->plen);
irep->syms = (mrb_sym *)codegen_realloc(s, irep->syms, sizeof(mrb_sym)*irep->slen);
if (s->filename) {
- irep->filename = s->filename;
+ fname_len = strlen(s->filename);
+ fname = codegen_malloc(s, fname_len + 1);
+ memcpy(fname, s->filename, fname_len);
+ fname[fname_len + 1] = '\0';
+ irep->filename = fname;
}
irep->nlocals = s->nlocals;
diff --git a/src/load.c b/src/load.c
index b3f13a8ef..81d47858a 100644
--- a/src/load.c
+++ b/src/load.c
@@ -267,9 +267,6 @@ read_rite_lineno_record(mrb_state *mrb, const uint8_t *bin, size_t irepno, uint3
mrb->irep[irepno]->lines = lines;
error_exit:
- if (fname) {
- mrb_free(mrb, fname);
- }
return ret;
}
diff --git a/src/state.c b/src/state.c
index 9bf051c1a..b34fbd025 100644
--- a/src/state.c
+++ b/src/state.c
@@ -101,6 +101,7 @@ mrb_irep_free(mrb_state *mrb, struct mrb_irep *irep)
mrb_free(mrb, irep->iseq);
mrb_free(mrb, irep->pool);
mrb_free(mrb, irep->syms);
+ mrb_free(mrb, (void *)irep->filename);
mrb_free(mrb, irep->lines);
mrb_free(mrb, irep);
}