Skip to content

Commit 6acf036

Browse files
committed
Mark iseq keyword default values during compilation
During compilation, we write keyword default values into the iseq, so we should mark it to ensure it does not get GC'd. This might fix issues on ASAN like http://ci.rvm.jp/logfiles/brlog.trunk_asan.20240927-194923 ==805257==ERROR: AddressSanitizer: use-after-poison on address 0x7b7e5e3e2828 at pc 0x5e09ac4822f8 bp 0x7ffde56b0140 sp 0x7ffde56b0138 READ of size 8 at 0x7b7e5e3e2828 thread T0 #0 0x5e09ac4822f7 in RB_BUILTIN_TYPE include/ruby/internal/value_type.h:191:30 angussidney#1 0x5e09ac4822f7 in rbimpl_RB_TYPE_P_fastpath include/ruby/internal/value_type.h:352:19 ruby#2 0x5e09ac4822f7 in gc_mark gc/default.c:4488:9 ruby#3 0x5e09ac51011e in rb_iseq_mark_and_move iseq.c:361:17 ruby#4 0x5e09ac4b85c4 in rb_imemo_mark_and_move imemo.c:386:9 ruby#5 0x5e09ac467544 in rb_gc_mark_children gc.c:2508:9 ruby#6 0x5e09ac482c24 in gc_mark_children gc/default.c:4673:5 ruby#7 0x5e09ac482c24 in gc_mark_stacked_objects gc/default.c:4694:9 ruby#8 0x5e09ac482c24 in gc_mark_stacked_objects_all gc/default.c:4732:12 ruby#9 0x5e09ac48c7f9 in gc_marks_rest gc/default.c:5755:9 ruby#10 0x5e09ac48c7f9 in gc_marks gc/default.c:5870:9 ruby#11 0x5e09ac48c7f9 in gc_start gc/default.c:6517:13
1 parent 3e1021b commit 6acf036

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

iseq.c

+5-3
Original file line numberDiff line numberDiff line change
@@ -354,11 +354,13 @@ rb_iseq_mark_and_move(rb_iseq_t *iseq, bool reference_updating)
354354
}
355355
}
356356

357-
if (body->param.flags.has_kw && ISEQ_COMPILE_DATA(iseq) == NULL) {
357+
if (body->param.flags.has_kw && body->param.keyword != NULL) {
358358
const struct rb_iseq_param_keyword *const keyword = body->param.keyword;
359359

360-
for (int j = 0, i = keyword->required_num; i < keyword->num; i++, j++) {
361-
rb_gc_mark_and_move(&keyword->default_values[j]);
360+
if (keyword->default_values != NULL) {
361+
for (int j = 0, i = keyword->required_num; i < keyword->num; i++, j++) {
362+
rb_gc_mark_and_move(&keyword->default_values[j]);
363+
}
362364
}
363365
}
364366

0 commit comments

Comments
 (0)