Issue #5714 has been updated by Hiroshi Shirosaki.

File read_binmode.patch added

It seems read with length should always be binary mode. #5562 patch lacks this point.
I think this patch fixes above issue.

It seems OK that stdin is default binary mode, but if stdout and stderr are default binary mode, newline conversion breaks.
We can confirm this by the following tests.

make test-all TESTS="ruby/test_io_m17n.rb"

----------------------------------------
Bug #5714: Unexpected error of STDIN#read with non-ascii input on Windows XP
http://redmine.ruby-lang.org/issues/5714

Author: Heesob Park
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: -


When the input contains non-ascii character, STDIN#read raised Permission denied or Invalid argument error with MSVC compiled version on Windows XP.

	C:\work>ruby -ve 'p STDIN.read(5)'
	ruby 2.0.0dev (2011-12-05 trunk 33955) [i386-mswin32_100]
	???κΈ?abcd
	-e:1:in `read': Permission denied - <STDIN> (Errno::EACCES)
		from -e:1:in `<main>'

	C:\>irb
	irb(main):001:0> STDIN.read(5)
	???κΈ?abcd
	Errno::EINVAL: Invalid argument - <STDIN>
		from (irb):1:in `read'
		from (irb):1
		from c:/usr/bin/irb.bat:19:in `<main>'

If the input is ascii only, STDIN.read works fine.

	C:\work>ruby -ve 'p STDIN.read(5)'
	ruby 2.0.0dev (2011-12-05 trunk 33955) [i386-mswin32_100]
	abcdefg
	"abcde"

	C:\>irb
	irb(main):001:0> STDIN.read(5)
	abcdefg
	=> "abcde"

It is odd but the Mingw compiled version works fine.

	C:\work>ruby -ve 'p STDIN.read(5)'
	ruby 2.0.0dev (2011-12-05 trunk 33955) [i386-mingw32]
	???κΈ?abcde
	"\xC7\xD1\xB1\xDBabc"

And Ruby 1.9.3p0 works fine.
	
	C:\>ruby -ve 'p STDIN.read(5)'
	ruby 1.9.3p0 (2011-10-30 revision 33570) [i386-mswin32_100]
	???κΈ?abcd
	"\xC7\xD1\xB1\xDBabc"



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