diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-11-30 08:17:14 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-11-30 08:17:14 +0900 |
| commit | 2b9f762ba13cbad50ec33f06a5700f96f0ecbe83 (patch) | |
| tree | 5afb59f1b92d5c7176ba1cd6a34a642b233c612c /src | |
| parent | d3e273ba4e6a7bc3d297c6f4b49aca0ebc4495c5 (diff) | |
| download | mruby-2b9f762ba13cbad50ec33f06a5700f96f0ecbe83.tar.gz mruby-2b9f762ba13cbad50ec33f06a5700f96f0ecbe83.zip | |
Avoid double free() of env stack; fix #3860
Should turn on `MRB_ENV_STACK_UNSHARED` flag only after env stack
reallocation. `malloc()` may fail.
Diffstat (limited to 'src')
| -rw-r--r-- | src/vm.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -283,12 +283,12 @@ mrb_env_unshare(mrb_state *mrb, struct REnv *e) if (!MRB_ENV_STACK_SHARED_P(e)) return; if (e->cxt != mrb->c) return; - MRB_ENV_UNSHARE_STACK(e); p = (mrb_value *)mrb_malloc(mrb, sizeof(mrb_value)*len); if (len > 0) { stack_copy(p, e->stack, len); } e->stack = p; + MRB_ENV_UNSHARE_STACK(e); mrb_write_barrier(mrb, (struct RBasic *)e); } } |
