[MacRuby] #1345: Assertion fails when invoke an eval() within CGI.new

MacRuby ruby-noreply at macosforge.org
Thu Jun 30 00:29:13 PDT 2011


#1345: Assertion fails when invoke an eval() within CGI.new
----------------------------------+-----------------------------------------
 Reporter:  watson1978@…          |       Owner:  lsansonetti@…        
     Type:  defect                |      Status:  new                  
 Priority:  blocker               |   Milestone:                       
Component:  MacRuby               |    Keywords:                       
----------------------------------+-----------------------------------------
 Assertion occurs when is invoked an eval at following point.

  * https://github.com/MacRuby/MacRuby/blob/master/lib/cgi/html.rb#L881
  * https://github.com/MacRuby/MacRuby/blob/master/lib/cgi/html.rb#L930
  * https://github.com/MacRuby/MacRuby/blob/master/lib/cgi/html.rb#L981
  * https://github.com/MacRuby/MacRuby/blob/master/lib/cgi/html.rb#L1015

 Test Script:
 {{{
 #!ruby
 require 'cgi'

 @environ = {
   'REQUEST_METHOD' => 'GET',
 }
 ENV.update(@environ)

 cgi = CGI.new('html3')
 cgi = CGI.new('html4')
 cgi = CGI.new('html4Tr')
 cgi = CGI.new('html4Fr')
 }}}

 Result:
 {{{
 $ DYLD_LIBRARY_PATH=. ./macruby -I./lib ~/tmp/ttt.rb
 Assertion failed: (len >= 0), function str_replace_with_uchars, file
 string.c, line 327.
 zsh: abort      DYLD_LIBRARY_PATH=. ./macruby -I./lib ~/tmp/ttt.rb
 }}}

 BackTrace:
 {{{
 Program received signal SIGABRT, Aborted.
 0x00007fff83d0f0b6 in __kill ()
 (gdb) bt
 #0  0x00007fff83d0f0b6 in __kill ()
 #1  0x00007fff83daf9f6 in abort ()
 #2  0x00007fff83d9c9bc in __assert_rtn ()
 #3  0x00000001000b7845 in str_replace_with_uchars (self=0x2000218c0,
 chars=0xfffffffdfff1ab5d, len=-22431) at string.c:327
 #4  0x00000001000c7269 in rb_unicode_str_new (ptr=0xfffffffdfff1ab5d,
 len=18446744073709529185) at string.c:6263
 #5  0x0000000100085f3a in lex_getline [inlined] () at /Users/watson/src
 /macruby-master/parse.y:5071
 #6  0x0000000100085f3a in ruby_yyparse (parser=<value temporarily
 unavailable, due to optimizations>) at parse.y:5213
 #7  0x000000010009059a in yycompile0 (arg=<value temporarily unavailable,
 due to optimizations>, tracing=<value temporarily unavailable, due to
 optimizations>) at parse.y:5000
 #8  0x0000000100090b75 in rb_parser_compile_string (vparser=<value
 temporarily unavailable, due to optimizations>, f=0x100992c3c "(eval)",
 s=8592144096, line=1) at parse.y:5033
 #9  0x0000000100154d77 in rb_vm_eval_string (self=8590852352, klass=0,
 src=8590812672, binding=0x0, file=0x100992c3c "(eval)", line=1,
 should_push_outer=false) at vm.cpp:4245
 #10 0x00000001000f32d9 in eval_string_with_should_push_outer
 (self=8590852352, klass=0, src=8590812672, scope=4, file=0x100992c3c
 "(eval)", line=1, should_push_outer=false) at vm_eval.c:299
 #11 0x00000001000f33a8 in eval_string (self=8590852352, klass=0,
 src=8590812672, scope=4, file=0x100992c3c "(eval)", line=1) at
 vm_eval.c:320
 #12 0x00000001000f3772 in rb_f_eval (self=8590852352, sel=0x100e271a0,
 argc=1, argv=0x7fff5fbfb750) at vm_eval.c:441
 #13 0x000000010013b264 in rb_vm_dispatch (_vm=0x100e231d0,
 cache=0x100d7f560, top=8590852352, self=8590852352, klass=0x2000fbaa0,
 sel=0x100e271a0, block=0x0, opt=2 '\002', argc=1, argv=0x7fff5fbfb750) at
 dispatcher.cpp:448
 #14 0x0000000103a00c54 in ?? ()
 #15 0x0000000103a14e45 in ?? ()
 #16 0x000000010013b7c4 in rb_vm_dispatch (_vm=0x100e231d0,
 cache=0x100d90d60, top=8590852352, self=8590852352, klass=0x2000fbaa0,
 sel=0x103e97ca0, block=0x0, opt=2 '\002', argc=<value temporarily
 unavailable, due to optimizations>, argv=0x0) at dispatcher.cpp:159
 #17 0x0000000103a00c54 in ?? ()
 #18 0x0000000103a0ecf0 in ?? ()
 #19 0x000000010013b7a9 in rb_vm_dispatch (_vm=0x100e231d0,
 cache=0x100d97b30, top=0, self=8590852352, klass=0x2000dfea0,
 sel=0x7fff82ffe23e, block=0x0, opt=2 '\002', argc=<value temporarily
 unavailable, due to optimizations>, argv=0x7fff5fbfdd10) at
 dispatcher.cpp:161
 #20 0x000000010006260a in rb_class_new_instance0 [inlined] () at
 /Users/watson/src/macruby-master/object.c:653
 #21 0x000000010006260a in rb_class_new_instance_imp (klass=<value
 temporarily unavailable, due to optimizations>, sel=<value temporarily
 unavailable, due to optimizations>, argc=1, argv=0x7fff5fbfdd10) at
 object.c:2021
 #22 0x000000010013b264 in rb_vm_dispatch (_vm=0x100e231d0,
 cache=0x100d93840, top=8590062368, self=8590851744, klass=0x2000bfec0,
 sel=0x100e22360, block=0x0, opt=0 '\0', argc=1, argv=0x7fff5fbfdd10) at
 dispatcher.cpp:448
 #23 0x0000000103a00c54 in ?? ()
 #24 0x0000000103a001c0 in ?? ()
 #25 0x0000000100154306 in rb_vm_run (fname=0x2000a7480
 "/Users/watson/tmp/ttt.rb", node=0x2000252a0, binding=<value temporarily
 unavailable, due to optimizations>, inside_eval=<value temporarily
 unavailable, due to optimizations>) at vm.cpp:4115
 #26 0x0000000100030de0 in ruby_run_node (n=0x2000252a0) at eval.c:211
 #27 0x0000000100000cf8 in main (argc=3, argv=0x100e1c040, envp=<value
 temporarily unavailable, due to optimizations>) at main.cpp:40
 (gdb)
 }}}

 When rb_unicode_str_new() was invoked, it seems that broken length was
 passed.

-- 
Ticket URL: <http://www.macruby.org/trac/ticket/1345>
MacRuby <http://macruby.org/>



More information about the macruby-tickets mailing list