Bug #8427

gets method truncates strings longer than 255 characters in Windows 7

Added by Jen Marsh 11 months ago. Updated 11 months ago.

[ruby-core:55062]
Status:Open
Priority:Normal
Assignee:-
Category:-
Target version:-
ruby -v:ruby 2.0.0p195 (2013-05-14) [x64-mingw32] Backport:1.9.3: UNKNOWN, 2.0.0: UNKNOWN

Description

When using the gets method from a Windows 7 command line (or XP according to other users), long input strings are truncated to 255 characters. Here is an example of code:
puts "Enter long string"
longstring = gets
puts "size of string : #{long
string.length}"
puts "string: #{long_string}"
For input strings of length exceeding 255 characters, the entered string is always truncated to 255 characters.

History

#1 Updated by Heesob Park 11 months ago

This bug is caused by changesets r28035, r29980 and r30280.

Here is a possible workaround patch:

diff --git a/win32.c b/win32.c.new
index 318af2f..b821cd4 100644
--- a/win32.c
+++ b/win32.c.new
@@ -6058,6 +6058,10 @@ rbw32read(int fd, void buf, sizet size)
DWORD mode;
GetConsoleMode((HANDLE)
osfhnd(fd),&mode);
islineinput = (mode & ENABLELINEINPUT) != 0;
+ if(size > 20480) {
+ size = 20480;
+ isconsole = FALSE;
+ }
}
retry:
/
get rid of console reading bug */

Also available in: Atom PDF