From 9d0a5148ae062a0481a4a18fbeb9cfd01dc10428 Mon Sep 17 00:00:00 2001 From: KJ Tsanaktsidis Date: Sat, 30 Mar 2024 12:58:01 +1100 Subject: [PATCH] Add missing RB_GC_GUARDs related to DATA_PTR I discovered the problem in `compile.c` from a failing TestIseqLoad#test_stressful_roundtrip test with ASAN enabled. The other two changes in array.c and string.c I found by auditing similar usages of DATA_PTR in the codebase. [Bug #20402] --- array.c | 1 + compile.c | 1 + string.c | 1 + 3 files changed, 3 insertions(+) diff --git a/array.c b/array.c index 00f5ab9181..bcf98fc012 100644 --- a/array.c +++ b/array.c @@ -6643,6 +6643,7 @@ ary_sample(rb_execution_context_t *ec, VALUE ary, VALUE randgen, VALUE nv, VALUE }); DATA_PTR(vmemo) = 0; st_free_table(memo); + RB_GC_GUARD(vmemo); } else { result = rb_ary_dup(ary); diff --git a/compile.c b/compile.c index ab041e6e89..a66d5e1b93 100644 --- a/compile.c +++ b/compile.c @@ -11318,6 +11318,7 @@ iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *const anchor, } } DATA_PTR(labels_wrapper) = 0; + RB_GC_GUARD(labels_wrapper); validate_labels(iseq, labels_table); if (!ret) return ret; return iseq_setup(iseq, anchor); diff --git a/string.c b/string.c index 5c29718dff..ecd6b97f88 100644 --- a/string.c +++ b/string.c @@ -1148,6 +1148,7 @@ str_cat_conv_enc_opts(VALUE newstr, long ofs, const char *ptr, long len, rb_str_resize(newstr, olen); } DATA_PTR(econv_wrapper) = 0; + RB_GC_GUARD(econv_wrapper); rb_econv_close(ec); switch (ret) { case econv_finished: