diff options
| author | Tomoyuki Sahara <[email protected]> | 2014-09-03 10:44:38 +0900 |
|---|---|---|
| committer | Tomoyuki Sahara <[email protected]> | 2014-09-03 10:44:38 +0900 |
| commit | 2fd49b2b9f93a8493731634f922ef63e42feab8c (patch) | |
| tree | 410c1b1e82da93cf560cf2b776aadeb8ddd336d3 | |
| parent | 80c37a4138cda9e643d4332d31c2c4fd6882b131 (diff) | |
| download | mruby-2fd49b2b9f93a8493731634f922ef63e42feab8c.tar.gz mruby-2fd49b2b9f93a8493731634f922ef63e42feab8c.zip | |
save and restore arena index to prevent arena overflow.
| -rw-r--r-- | src/class.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/class.c b/src/class.c index b7da56514..8ec572660 100644 --- a/src/class.c +++ b/src/class.c @@ -1069,8 +1069,10 @@ mrb_mod_attr_reader(mrb_state *mrb, mrb_value mod) struct RClass *c = mrb_class_ptr(mod); mrb_value *argv; mrb_int argc, i; + int ai; mrb_get_args(mrb, "*", &argv, &argc); + ai = mrb_gc_arena_save(mrb); for (i=0; i<argc; i++) { mrb_value name, str; mrb_sym method, sym; @@ -1085,6 +1087,7 @@ mrb_mod_attr_reader(mrb_state *mrb, mrb_value mod) name = mrb_symbol_value(sym); mrb_define_method_raw(mrb, c, method, mrb_proc_new_cfunc_with_env(mrb, attr_reader, 1, &name)); + mrb_gc_arena_restore(mrb, ai); } return mrb_nil_value(); } @@ -1106,8 +1109,10 @@ mrb_mod_attr_writer(mrb_state *mrb, mrb_value mod) struct RClass *c = mrb_class_ptr(mod); mrb_value *argv; mrb_int argc, i; + int ai; mrb_get_args(mrb, "*", &argv, &argc); + ai = mrb_gc_arena_save(mrb); for (i=0; i<argc; i++) { mrb_value name, str, attr; mrb_sym method, sym; @@ -1131,6 +1136,7 @@ mrb_mod_attr_writer(mrb_state *mrb, mrb_value mod) mrb_define_method_raw(mrb, c, method, mrb_proc_new_cfunc_with_env(mrb, attr_writer, 1, &attr)); + mrb_gc_arena_restore(mrb, ai); } return mrb_nil_value(); } |
