Bug #8427

gets method truncates strings longer than 255 characters in Windows 7

Added by Jen Marsh over 2 years ago. Updated over 2 years ago.

[ruby-core:55062]
Status:Open
Priority:Normal
Assignee:-
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"
long_string = 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 over 2 years 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 @@ rb_w32_read(int fd, void buf, size_t size)
DWORD mode;
GetConsoleMode((HANDLE)_osfhnd(fd),&mode);
islineinput = (mode & ENABLE_LINE_INPUT) != 0;
+ if(size > 20480) {
+ size = 20480;
+ isconsole = FALSE;
+ }
}
retry:
/
get rid of console reading bug */

Also available in: Atom PDF