mrb_mt_foreach() needs to update the pointer at each loop

When calling a user function, a pointer retrieved outside of a loop may be invalidated.
This commit is contained in:
dearblue
2025-06-19 22:35:09 +09:00
parent 2edfd96cbe
commit 5931aeb825
+2 -2
View File
@@ -230,9 +230,9 @@ mrb_mt_foreach(mrb_state *mrb, struct RClass *c, mrb_mt_foreach_func *fn, void *
mt_tbl *t = c->mt;
if (!t || t->size == 0) return;
union mt_ptr *vals = mt_vals(t);
mrb_sym *keys = mt_keys(t);
for (int i=0; i<t->size; i++) {
union mt_ptr *vals = mt_vals(t);
mrb_sym *keys = mt_keys(t);
mrb_sym key = keys[i];
if (fn(mrb, MT_KEY_SYM(key), create_method_value(mrb, key, vals[i]), p) != 0) {
return;