From d90835aeb54c635d99a3ba199605d062109a54ed Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Sun, 4 Dec 2022 15:23:09 -0500 Subject: Fix crash when RGENGC_CHECK_MODE=2 Commit dba61f4 fixes a crash when GC'ing a iseq that failed to compile. However, if we turn on RGENGC_CHECK_MODE then rb_iseq_memsize crashes since it cannot handle an iseq without is_entries. --- iseq.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'iseq.c') diff --git a/iseq.c b/iseq.c index b16369e420..381bf6ed20 100644 --- a/iseq.c +++ b/iseq.c @@ -515,15 +515,17 @@ rb_iseq_memsize(const rb_iseq_t *iseq) /* body->is_entries */ size += ISEQ_IS_SIZE(body) * sizeof(union iseq_inline_storage_entry); - /* IC entries constant segments */ - for (unsigned int ic_idx = 0; ic_idx < body->ic_size; ic_idx++) { - IC ic = &ISEQ_IS_IC_ENTRY(body, ic_idx); - const ID *ids = ic->segments; - if (!ids) continue; - while (*ids++) { - size += sizeof(ID); + if (ISEQ_BODY(iseq)->is_entries) { + /* IC entries constant segments */ + for (unsigned int ic_idx = 0; ic_idx < body->ic_size; ic_idx++) { + IC ic = &ISEQ_IS_IC_ENTRY(body, ic_idx); + const ID *ids = ic->segments; + if (!ids) continue; + while (*ids++) { + size += sizeof(ID); + } + size += sizeof(ID); // null terminator } - size += sizeof(ID); // null terminator } /* body->call_data */ -- cgit v1.2.3