From 6391ae9ebc0b7a6668e57aa9f3c7b76ff83fab70 Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Wed, 22 Nov 2023 09:16:43 +0100 Subject: objspace_dump.c: dump call cache ids with dump_append_id Not all `ID` have an associated string. Fixes a SEGFAULT in ObjectSpace.dump_all spec. --- ext/objspace/objspace_dump.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'ext/objspace/objspace_dump.c') diff --git a/ext/objspace/objspace_dump.c b/ext/objspace/objspace_dump.c index 9eb14be9e3..866a49eff4 100644 --- a/ext/objspace/objspace_dump.c +++ b/ext/objspace/objspace_dump.c @@ -366,8 +366,9 @@ dump_append_string_content(struct dump_config *dc, VALUE obj) static inline void dump_append_id(struct dump_config *dc, ID id) { - if (is_instance_id(id)) { - dump_append_string_value(dc, rb_sym2str(ID2SYM(id))); + VALUE str = rb_sym2str(ID2SYM(id)); + if (RTEST(str)) { + dump_append_string_value(dc, str); } else { dump_append(dc, "\"ID_INTERNAL("); @@ -443,7 +444,7 @@ dump_object(VALUE obj, struct dump_config *dc) mid = vm_ci_mid((const struct rb_callinfo *)obj); if (mid != 0) { dump_append(dc, ", \"mid\":"); - dump_append_string_value(dc, rb_id2str(mid)); + dump_append_id(dc, mid); } break; @@ -451,7 +452,7 @@ dump_object(VALUE obj, struct dump_config *dc) mid = vm_cc_cme((const struct rb_callcache *)obj)->called_id; if (mid != 0) { dump_append(dc, ", \"called_id\":"); - dump_append_string_value(dc, rb_id2str(mid)); + dump_append_id(dc, mid); VALUE klass = ((const struct rb_callcache *)obj)->klass; if (klass != 0) { -- cgit v1.2.3