diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-09-03 11:02:52 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-09-03 11:02:52 +0900 |
| commit | 1fdf47d71aff39b780384969c6883a9a04f9ac90 (patch) | |
| tree | eac3966fe2fb7713238debc964d4b50bc204b510 /src | |
| parent | f6e7de5fa885732943dbdb65e5556550d24eb2ba (diff) | |
| parent | 2fd49b2b9f93a8493731634f922ef63e42feab8c (diff) | |
| download | mruby-1fdf47d71aff39b780384969c6883a9a04f9ac90.tar.gz mruby-1fdf47d71aff39b780384969c6883a9a04f9ac90.zip | |
Merge pull request #2582 from iij/pr-attr-accessor-save-arena
save and restore arena index to prevent arena overflow.
Diffstat (limited to 'src')
| -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 5f082fc45..c11346223 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(); } |
