Bug #2972: Windows での gets(nil)
http://redmine.ruby-lang.org/issues/show/2972

起票者: Takaya KUBOTA
ステータス: Open, 優先度: Normal
ruby -v: ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mingw32]

久保田と申します。

mingw 版 1.8.7 で gets(nil) の動作に不具合があるようなので
ご報告させていただきます。
(cygwin 版では発生しません)

読み込まれるバイト数が不安定なのと、
得られた文字列も途中から入力のファイルと異なっています。

$ wc -c a.aes-128-ecb
557088 a.aes-128-ecb

$ od -j 352 -t x1z a.aes-128-ecb | head
0000540 a9 22 c5 6c b2 f5 e3 0a 92 ca 4e e5 72 a2 b5 b6  >.".l......N.r...<
0000560 e8 dd 15 ab 5e 8b bc 5b 93 5e c6 43 ab e1 18 a9  >....^..[.^.C....<
0000600 fa 54 58 e4 97 46 11 72 d9 30 53 48 07 b3 75 d3  >.TX..F.r.0SH..u.<
0000620 0b f0 5a 20 1a b4 2f 7d 42 08 e5 4f 73 57 83 65  >..Z ../}B..OsW.e<
0000640 28 c2 62 7e fb 0b 34 ff a5 62 3a 40 a8 46 28 21  >(.b~..4..b:@.F(!<
0000660 d6 4a fd 84 39 57 3b f5 0b 21 26 6a a2 36 d3 6b  >.J..9W;..!&j.6.k<
0000700 70 b3 c2 63 f6 3e 3d 8b c2 59 96 f6 f2 5c 07 6d  >p..c.>=..Y...\.m<
0000720 13 87 9c 43 68 63 09 87 9a 81 18 f3 e2 25 f0 b4  >...Chc.......%..<
0000740 91 66 20 de f5 b4 c7 e3 3d 8d 5d 6a a5 86 51 eb  >.f .....=.]j..Q.<
0000760 07 62 bb fd 52 d1 80 d1 1c 0f 36 7e d1 75 71 1c  >.b..R.....6~.uq.<

$ ~/make/ruby-1.8.7-p249-mingw/ruby.exe -e 'p gets(nil).size' a.aes-128-ecb
9706

$ ruby -e 'p gets(nil).size' a.aes-128-ecb  (こちらは cygwin 版です)
557088

---
s = gets(nil)
0.step(s.length, 16) do |i|
        p s[i, 16].unpack("H*")
end
---
上記のようなスクリプトで、mingw 版と cygwin 版で diff を取ると、

*** mingw32.txt 2010-03-16 15:42:19.888875000 +0900
--- cygwin.txt  2010-03-16 15:40:22.357625000 +0900
***************
*** 23,466 ****
  ["a922c56cb2f5e30a92ca4ee572a2b5b6"]
  ["e8dd15ab5e8bbc5b935ec643abe118a9"]
  ["fa5458e497461172d930534807b375d3"]
! ["0bf05a20cb49805ff0d5f3cd3bb15cc4"]
! ["73e9bde65892c2f2a642beccbe916869"]
! ["fb810aaa96be7a3b08e0aec907b27164"]

となります(0xcb から異なる)。
念のため、上記のスクリプトで使用した a.aes-128-ecb を添付いたします。
--
久保田貴也


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