[ruby-cvs:72248] shyouhei:r65148 (trunk): fix SEGV in rb_raw_obj_info()

shyouhei at ruby-lang.org shyouhei at ruby-lang.org
Thu Oct 18 14:51:29 JST 2018


shyouhei	2018-10-18 14:51:29 +0900 (Thu, 18 Oct 2018)

  New Revision: 65148

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=65148

  Log:
    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 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 miniruby`rb_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 miniruby`rb_raw_obj_info(buff="0x000000010205d158 [0    ] T_IMEMO", buff_size=256, obj=4328903000) + 2361 at gc.c:9617
        frame #1: 0x00000001000c433f miniruby`obj_info(obj=4328903000) + 95 at gc.c:9671
        frame #2: 0x00000001000ce2ac miniruby`newobj_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 miniruby`newobj_of(klass=4302478608, flags=36890, v1=0, v2=0, v3=0, wb_protected=1) + 217 at gc.c:1968
        frame #4: 0x00000001000c0bcb miniruby`rb_imemo_new(type=imemo_ast, v1=0, v2=0, v3=0, v0=4302478608) + 75 at gc.c:2017
        frame #5: 0x0000000100148f2a miniruby`rb_ast_new + 58 at node.c:1118
        frame #6: 0x000000010018d9e2 miniruby`yycompile(vparser=4328903720, p=0x0000000100729670, fname=4328903160, line=1) + 98 at parse.y:4925
        frame #7: 0x000000010018d66f miniruby`parser_compile_string(vparser=4328903720, fname=4328903160, s=4328904440, line=1) + 143 at parse.y:4995
        frame #8: 0x000000010018d768 miniruby`rb_parser_compile_string_path(vparser=4328903720, f=4328903160, s=4328904440, line=1) + 56 at parse.y:5015
        frame #9: 0x000000010018d71e miniruby`rb_parser_compile_string(vparser=4328903720, f="-e", s=4328904440, line=1) + 62 at parse.y:5008
        frame #10: 0x00000001002130d5 miniruby`process_options(argc=0, argv=0x00007fff5fbfdc08, opt=0x00007fff5fbfd9e8) + 3477 at ruby.c:1754
        frame #11: 0x00000001002122dd miniruby`ruby_process_options(argc=2, argv=0x00007fff5fbfdbf8) + 285 at ruby.c:2332
        frame #12: 0x00000001000aa966 miniruby`ruby_options(argc=2, argv=0x00007fff5fbfdbf8) + 262 at eval.c:118
        frame #13: 0x0000000100000ed4 miniruby`main(argc=2, argv=0x00007fff5fbfdbf8) + 116 at main.c:42
        frame #14: 0x00007fff933845ad libdyld.dylib`start + 1
        frame #15: 0x00007fff933845ad libdyld.dylib`start + 1
    (lldb)

  Modified files:
    trunk/gc.c


More information about the ruby-cvs mailing list