[#41916] Proposal: Bitmap Marking GC — Narihiro Nakamura <authornari@...>

Hi.

18 messages 2012/01/05

[#41941] [ruby-trunk - Bug #5851][Open] make check fails when compiling with GCC 4.7 - *** longjmp causes uninitialized stack frame *** — Vit Ondruch <v.ondruch@...>

12 messages 2012/01/06

[#41979] [ruby-trunk - Bug #5865][Open] Exception#== should return false if the classes differ — Hiro Asari <asari.ruby@...>

10 messages 2012/01/08

[#42003] [ruby-trunk - Bug #5871][Open] regexp \W matches some word characters when inside a case-insensitive character class — Gareth Adams <gareth@...>

14 messages 2012/01/09

[#42016] [ruby-trunk - Feature #5873][Open] Adopt FFI over DL — Heesob Park <phasis@...>

15 messages 2012/01/10

[#42149] [ruby-trunk - Feature #5899][Open] chaining comparsions. — Ondrej Bilka <neleai@...>

12 messages 2012/01/16

[#42164] [ruby-trunk - Feature #5903][Open] Optimize st_table (take 2) — Yura Sokolov <funny.falcon@...>

18 messages 2012/01/17

[ruby-core:42107] [ruby-trunk - Bug #5888] JSON unittest fails

From: Bohuslav Kabrda <bkabrda@...>
Date: 2012-01-13 08:32:45 UTC
List: ruby-core #42107
Issue #5888 has been updated by Bohuslav Kabrda.


The flaw seems to be in ext/json/parser/parser.c - I compiled only this one with -O0 and the others with -O2 and everything worked fine.
When I compile everything with -O2 and use

valgrind --track-origins=yes -v --read-var-info=yes ruby -rjson -v -e "puts JSON.parse '[\"\u0000\"]'"

Part of the valgrind output is quite suspicious:

==3350== Conditional jump or move depends on uninitialised value(s)
==3350==    at 0x4EAB4F5: rb_io_puts (io.c:6223)
==3350==    by 0x4EAB6AE: io_puts_ary (io.c:6174)
==3350==    by 0x4F853EF: exec_recursive_i (thread.c:3940)
==3350==    by 0x4F85A43: exec_recursive (thread.c:3991)
==3350==    by 0x4EAB42C: rb_io_puts (io.c:6217)
==3350==    by 0x4F787C1: vm_call0 (vm_eval.c:79)
==3350==    by 0x4F7BFC2: vm_call_method (vm_insnhelper.c:404)
==3350==    by 0x4F72191: vm_exec_core (insns.def:1015)
==3350==    by 0x4F777B7: vm_exec (vm.c:1220)
==3350==    by 0x4F7E7ED: rb_iseq_eval_main (vm.c:1461)
==3350==    by 0x4E89E79: ruby_exec_internal (eval.c:204)
==3350==    by 0x4E8A92C: ruby_exec_node (eval.c:251)
==3350==  Uninitialised value was created by a stack allocation
==3350==    at 0xD3E1430: JSON_parse_string (parser.rl:497)
==3350== 
==3350== Syscall param write(buf) points to uninitialised byte(s)
==3350==    at 0x524E00D: ??? (in /lib64/libpthread-2.15.so)
==3350==    by 0x4EA43B3: io_flush_buffer_sync (io.c:640)
==3350==    by 0x4EA9D15: rb_io_fptr_cleanup (io.c:3490)
==3350==    by 0x4EABCB0: rb_io_fptr_finalize (io.c:3579)
==3350==    by 0x4E99939: finalize_list (gc.c:2944)
==3350==    by 0x4E9D301: rb_gc_call_finalizer_at_exit (gc.c:3075)
==3350==    by 0x4E8C15A: ruby_cleanup (eval.c:147)
==3350==    by 0x4E8C33E: ruby_run_node (eval.c:244)
==3350==    by 0x40086A: main (main.c:38)
==3350==  Address 0xd3039b0 is 0 bytes inside a block of size 8,192 alloc'd
==3350==    at 0x4C284CD: malloc (vg_replace_malloc.c:236)
==3350==    by 0x4E9C454: vm_xmalloc (gc.c:764)
==3350==    by 0x4EAA3F0: io_binwrite (io.c:839)
==3350==    by 0x4EAA67D: io_write (io.c:945)
==3350==    by 0x4F787C1: vm_call0 (vm_eval.c:79)
==3350==    by 0x4F7905F: rb_funcall (vm_eval.c:235)
==3350==    by 0x4EAB475: rb_io_puts (io.c:6222)
==3350==    by 0x4EAB6AE: io_puts_ary (io.c:6174)
==3350==    by 0x4F853EF: exec_recursive_i (thread.c:3940)
==3350==    by 0x4F85A43: exec_recursive (thread.c:3991)
==3350==    by 0x4EAB42C: rb_io_puts (io.c:6217)
==3350==    by 0x4F787C1: vm_call0 (vm_eval.c:79)
==3350==  Uninitialised value was created by a stack allocation
==3350==    at 0xD3E1430: JSON_parse_string (parser.rl:497)

Mainly the last uninitialized value it particularly interesting, yet I'm not sure what exactly is causing the problem.
----------------------------------------
Bug #5888: JSON unittest fails
https://bugs.ruby-lang.org/issues/5888

Author: Vit Ondruch
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: ruby 1.9.3p0 (2011-10-30) [x86_64-linux]


Hello,

When building Ruby 1.9.3 (as well as 2.0.0), the make check spits following errors:

  1) Failure:
test_parse_values(TC_JSON) [/builddir/build/BUILD/ruby-1.9.3-p0/test/json/test_json.rb:174]:
<["\"\b\n\r\t\u0000\u001F"]> expected but was
<["\"\b\n\r\t\xA8\xA8"]>.
  2) Failure:
test_parser_reset(TC_JSON) [/builddir/build/BUILD/ruby-1.9.3-p0/test/json/test_json.rb:291]:
<{"a"=>2,
 "b"=>3.141,
 "c"=>"c",
 "d"=>[1, "b", 3.14],
 "e"=>{"foo"=>"bar"},
 "g"=>"\"\u0000\u001F",
 "h"=>1000.0,
 "i"=>0.001}> expected but was
<{"a"=>2,
 "b"=>3.141,
 "c"=>"c",
 "d"=>[1, "b", 3.14],
 "e"=>{"foo"=>"bar"},
 "g"=>"\"\xA0\xA0",
 "h"=>1000.0,
 "i"=>0.001}>.
  3) Failure:
test_fast_generate(TC_JSONGenerate) [/builddir/build/BUILD/ruby-1.9.3-p0/test/json/test_json_generate.rb:78]:
<{"a"=>2,
 "b"=>3.141,
 "c"=>"c",
 "d"=>[1, "b", 3.14],
 "e"=>{"foo"=>"bar"},
 "g"=>"\"\u0000\u001F",
 "h"=>1000.0,
 "i"=>0.001}> expected but was
<{"a"=>2,
 "b"=>3.141,
 "c"=>"c",
 "d"=>[1, "b", 3.14],
 "e"=>{"foo"=>"bar"},
 "g"=>"\"\xA0\xA0",
 "h"=>1000.0,
 "i"=>0.001}>.
  4) Failure:
test_generate(TC_JSONGenerate) [/builddir/build/BUILD/ruby-1.9.3-p0/test/json/test_json_generate.rb:47]:
<{"a"=>2,
 "b"=>3.141,
 "c"=>"c",
 "d"=>[1, "b", 3.14],
 "e"=>{"foo"=>"bar"},
 "g"=>"\"\u0000\u001F",
 "h"=>1000.0,
 "i"=>0.001}> expected but was
<{"a"=>2,
 "b"=>3.141,
 "c"=>"c",
 "d"=>[1, "b", 3.14],
 "e"=>{"foo"=>"bar"},
 "g"=>"\"\xA0\xA0",
 "h"=>1000.0,
 "i"=>0.001}>.
  5) Failure:
test_generate_pretty(TC_JSONGenerate) [/builddir/build/BUILD/ruby-1.9.3-p0/test/json/test_json_generate.rb:61]:
<{"a"=>2,
 "b"=>3.141,
 "c"=>"c",
 "d"=>[1, "b", 3.14],
 "e"=>{"foo"=>"bar"},
 "g"=>"\"\u0000\u001F",
 "h"=>1000.0,
 "i"=>0.001}> expected but was
<{"a"=>2,
 "b"=>3.141,
 "c"=>"c",
 "d"=>[1, "b", 3.14],
 "e"=>{"foo"=>"bar"},
 "g"=>"\"\xA0\xA0",
 "h"=>1000.0,
 "i"=>0.001}>.
  6) Failure:
test_own_state(TC_JSONGenerate) [/builddir/build/BUILD/ruby-1.9.3-p0/test/json/test_json_generate.rb:92]:
<{"a"=>2,
 "b"=>3.141,
 "c"=>"c",
 "d"=>[1, "b", 3.14],
 "e"=>{"foo"=>"bar"},
 "g"=>"\"\u0000\u001F",
 "h"=>1000.0,
 "i"=>0.001}> expected but was
<{"a"=>2,
 "b"=>3.141,
 "c"=>"c",
 "d"=>[1, "b", 3.14],
 "e"=>{"foo"=>"bar"},
 "g"=>"\"\xA0\xA0",
 "h"=>1000.0,
 "i"=>0.001}>.
  7) Failure:
test_chars(TC_JSONUnicode) [/builddir/build/BUILD/ruby-1.9.3-p0/test/json/test_json_unicode.rb:57]:
<"\x00"> expected but was
<"\xA0">.
  8) Failure:
test_unicode(TC_JSONUnicode) [/builddir/build/BUILD/ruby-1.9.3-p0/test/json/test_json_unicode.rb:20]:
<["\u00A9 \u2260 \u20AC! \u0001"]> expected but was
<["\u00A9 \u2260 \u20AC! \xD8"]>.


Please note that I am building Ruby using GCC 4.7 on Fedora Rawhide. I have not seen this errors before with GCC 4.6


-- 
http://bugs.ruby-lang.org/

In This Thread