Project

General

Profile

« Previous | Next » 

Revision d3d1a3a5

Added by shyouhei (Shyouhei Urabe) over 5 years ago

fix SEGV in rb_raw_obj_info()

This funcion can be called from inside of rb_ast_new().
Should add appropriate case branches.

(lldb) run
Process 9135 launched: './miniruby' (x86_64)
Process 9135 stopped

  • thread #1: tid = 0xdf36b, 0x00000001000ca4f9 minirubyrb_raw_obj_info(buff="0x000000010205d158 [0 ] T_IMEMO", buff_size=256, obj=4328903000) + 2361 at gc.c:9617, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) frame #0: 0x00000001000ca4f9 minirubyrb_raw_obj_info(buff="0x000000010205d158 [0 ] T_IMEMO", buff_size=256, obj=4328903000) + 2361 at gc.c:9617
    9614 IMEMO_NAME(iseq);
    9615 IMEMO_NAME(tmpbuf);
    9616 #undef IMEMO_NAME
    -> 9617 default: UNREACHABLE;
    9618 }
    9619 snprintf(buff, buff_size, "%s %s", buff, imemo_name);
    9620
    (lldb) bt
  • thread #1: tid = 0xdf36b, 0x00000001000ca4f9 miniruby`rb_raw_obj_info(buff="0x000000010205d158 [0 ] T_IMEMO", buff_size=256, obj=4328903000) + 2361 at gc.c:9617, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
    • frame #0: 0x00000001000ca4f9 minirubyrb_raw_obj_info(buff="0x000000010205d158 [0 ] T_IMEMO", buff_size=256, obj=4328903000) + 2361 at gc.c:9617 frame #1: 0x00000001000c433f minirubyobj_info(obj=4328903000) + 95 at gc.c:9671
      frame #2: 0x00000001000ce2ac minirubynewobj_init(klass=4302478608, flags=36890, v1=0, v2=0, v3=0, wb_protected=1, objspace=0x0000000101800410, obj=4328903000) + 444 at gc.c:1882 frame #3: 0x00000001000c0a49 minirubynewobj_of(klass=4302478608, flags=36890, v1=0, v2=0, v3=0, wb_protected=1) + 217 at gc.c:1968
      frame #4: 0x00000001000c0bcb minirubyrb_imemo_new(type=imemo_ast, v1=0, v2=0, v3=0, v0=4302478608) + 75 at gc.c:2017 frame #5: 0x0000000100148f2a minirubyrb_ast_new + 58 at node.c:1118
      frame #6: 0x000000010018d9e2 minirubyyycompile(vparser=4328903720, p=0x0000000100729670, fname=4328903160, line=1) + 98 at parse.y:4925 frame #7: 0x000000010018d66f minirubyparser_compile_string(vparser=4328903720, fname=4328903160, s=4328904440, line=1) + 143 at parse.y:4995
      frame #8: 0x000000010018d768 minirubyrb_parser_compile_string_path(vparser=4328903720, f=4328903160, s=4328904440, line=1) + 56 at parse.y:5015 frame #9: 0x000000010018d71e minirubyrb_parser_compile_string(vparser=4328903720, f="-e", s=4328904440, line=1) + 62 at parse.y:5008
      frame #10: 0x00000001002130d5 minirubyprocess_options(argc=0, argv=0x00007fff5fbfdc08, opt=0x00007fff5fbfd9e8) + 3477 at ruby.c:1754 frame #11: 0x00000001002122dd minirubyruby_process_options(argc=2, argv=0x00007fff5fbfdbf8) + 285 at ruby.c:2332
      frame #12: 0x00000001000aa966 minirubyruby_options(argc=2, argv=0x00007fff5fbfdbf8) + 262 at eval.c:118 frame #13: 0x0000000100000ed4 minirubymain(argc=2, argv=0x00007fff5fbfdbf8) + 116 at main.c:42
      frame #14: 0x00007fff933845ad libdyld.dylibstart + 1 frame #15: 0x00007fff933845ad libdyld.dylibstart + 1
      (lldb)

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65148 b2dd03c8-39d4-4d8f-98ff-823fe69b080e