From: Tanaka Akira Date: 2008-04-22T08:06:38+09:00 Subject: [ruby-dev:34480] 1.8 sprintf %b generates broken strings with GC.stress GC.stress が入ったので思い立ってふと試してみると、1.8 の sprintf の %b は "\000\242\272\3535+\000\000P{d\000\000\000\000\000ffffffffffff,\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\220\000\000\000\000\000\000\00000000000000000000000000000000000000000000000000000000000001" などという壊れた文字列を生成することがあるようです。 % cat x.rb GC.stress=true VS = [ -0x1000000000000000000000000000000000000000000000002, -0x1000000000000000000000000000000000000000000000001, -0x1000000000000000000000000000000000000000000000000, -0xffffffffffffffffffffffffffffffffffffffffffffffff, -0x1000000000000000000000002, -0x1000000000000000000000001, -0x1000000000000000000000000, -0xffffffffffffffffffffffff, -0x10000000000000002, -0x10000000000000001, -0x10000000000000000, -0xffffffffffffffff, -0x4000000000000002, -0x4000000000000001, -0x4000000000000000, -0x3fffffffffffffff, -0x100000002, -0x100000001, -0x100000000, -0xffffffff, -0xc717a08d, -0x80000002, -0x80000001, -0x80000000, -0x7fffffff, -0x524b2245, -0x40000002, -0x40000001, -0x40000000, -0x3fffffff, -0x10002, -0x10001, -0x10000, -0xffff, -0x8101, -0x8002, -0x8001, -0x8000, -0x7fff, -0x7f01, -65, -64, -63, -62, -33, -32, -31, -30, -3, -2, -1, 0, 1, 2, 3, 30, 31, 32, 33, 62, 63, 64, 65, 0x7f01, 0x7ffe, 0x7fff, 0x8000, 0x8001, 0x8101, 0xfffe, 0xffff, 0x10000, 0x10001, 0x3ffffffe, 0x3fffffff, 0x40000000, 0x40000001, 0x524b2245, 0x7ffffffe, 0x7fffffff, 0x80000000, 0x80000001, 0xc717a08d, 0xfffffffe, 0xffffffff, 0x100000000, 0x100000001, 0x3ffffffffffffffe, 0x3fffffffffffffff, 0x4000000000000000, 0x4000000000000001, 0xfffffffffffffffe, 0xffffffffffffffff, 0x10000000000000000, 0x10000000000000001, 0xffffffffffffffffffffffff, 0x1000000000000000000000000, 0x1000000000000000000000001, 0xffffffffffffffffffffffffffffffffffffffffffffffff, 0x1000000000000000000000000000000000000000000000000, 0x1000000000000000000000000000000000000000000000001 ] VS.each {|a| s = sprintf("%b", a) p s if /[^01.]/ =~ s } % ./ruby -v x.rb ruby 1.8.7 (2008-04-19 patchlevel 5000) [x86_64-linux] "\000\242\272\3535+\000\000\200\202d\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000111111111111111111111111111111111111111111111111111111111110" "\000\242\272\3535+\000\000\020~d\000\000\000\000\0000000000000000000000000000000000000000,\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000111111111111111111111111111111111111111111111111111111111111" "\000\242\272\3535+\000\000\260|d\000\000\000\000\0000000000000001,\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\220\000\000\000\000\000\000\00000000000000000000000000000000000000000000000000000000000000" "\000\242\272\3535+\000\000P{d\000\000\000\000\000ffffffffffff,\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\220\000\000\000\000\000\000\00000000000000000000000000000000000000000000000000000000000001" -- [田中 哲][たなか あきら][Tanaka Akira]