diff options
author | Peter Zhu <[email protected]> | 2022-12-04 15:23:09 -0500 |
---|---|---|
committer | Peter Zhu <[email protected]> | 2022-12-04 15:23:09 -0500 |
commit | d90835aeb54c635d99a3ba199605d062109a54ed (patch) | |
tree | c62bca309612d6244a2c791401e368dbb387c67a /iseq.c | |
parent | e58c4f97fa45206172a19803bfb2270b9a5bc010 (diff) |
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.
Diffstat (limited to 'iseq.c')
-rw-r--r-- | iseq.c | 18 |
1 files changed, 10 insertions, 8 deletions
@@ -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 */ |