Actions
Bug #21370
open`it` can cause ISeq serialization failure
Description
Originally reported at: https://github.com/rails/rails/issues/55108
iseq = RubyVM::InstructionSequence.compile(<<~'RUBY')
[1].each do
rescue => e
puts it
end
RUBY
iseq.to_binary # CRASH
miniruby(sigsegv) (null):0
miniruby(RB_FL_ANY_RAW+0x20) [0x1010ac504] internal/fl_type.h:507
miniruby(rbimpl_rstring_getmem+0x20) [0x101090674] internal/core/rstring.h:393
miniruby(rb_str_cmp+0x4c) [0x10109920c] string.c:4541
miniruby(outer_variable_cmp+0x3c) [0x100e43b64] compile.c:13381
miniruby(cmp_bsd_qsort+0x3c) [0x1010fe810] util.c:239
miniruby(ruby_qsort+0x5c) [0x1010fe7a8] util.c:248
miniruby(ibf_dump_outer_variables+0x150) [0x100e43708] compile.c:13402
miniruby(ibf_dump_iseq_each+0x19c) [0x100e423cc] compile.c:13527
miniruby(ibf_dump_iseq_list_i+0x38) [0x100e420fc] compile.c:13862
miniruby(apply_functor+0x40) [0x10107bad8] st.c:1644
It is crashing while trying to sort outer variables, and it
is anonymous.
Updated by byroot (Jean Boussier) 1 day ago
I have a fix but no idea if it's the correct approach: https://github.com/ruby/ruby/pull/13436
Actions
Like0
Like0