Defining a method on an object (def obj.method) inside an instance_eval block causes MRuby to crash with a null pointer dereference. This occurs even with minimal valid Ruby syntax.
Input
a = 0
d = [1, nil, " sdfg"]
a = rand.instance_eval do
def d.abc
end
end
AddressSanitizer Output
$ /home/mruby/build/host/bin/mruby input.rb
/home/mruby/src/class.c:927:23: runtime error: member access within null pointer of type 'struct REnv'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /home/mruby/src/class.c:927:23 in
AddressSanitizer:DEADLYSIGNAL
=================================================================
==54350==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000010 (pc 0x0000004f4734 bp 0x7fffffddcff0 sp 0x7fffffddcfa0 T0)
==54350==The signal is caused by a READ memory access.
==54350==Hint: address points to the zero page.
#0 0x4f4734 in find_visibility_scope /home/mruby/src/class.c:927:26
#1 0x4f3b66 in mrb_define_method_raw /home/mruby/src/class.c:1003:5
#2 0x5f2970 in mrb_vm_exec /home/mruby/src/vm.c:3031:7
#3 0x6f8164 in mrb_load_exec /home/mruby/mrbgems/mruby-compiler/core/parse.y:6935:7
#4 0x6f94b9 in mrb_load_detect_file_cxt /home/mruby/mrbgems/mruby-compiler/core/parse.y:6978:12
#5 0x4c7aed in main /home/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c:353:11
#6 0x7f21a13e4082 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24082)
#7 0x41d81d in _start (/home/mruby/build/host/bin/mruby+0x41d81d)
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /home/mruby/src/class.c:927:26 in find_visibility_scope
==54350==ABORTING
Environment
MRuby version: mruby 3.4.0
Platform: x86_64-linux