Project

General

Profile

Bug #8427

gets method truncates strings longer than 255 characters in Windows 7

Added by Jen Marsh about 3 years ago. Updated about 3 years ago.

Status:
Open
Priority:
Normal
Assignee:
-
ruby -v:
ruby 2.0.0p195 (2013-05-14) [x64-mingw32]
[ruby-core:55062]

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 [ruby-core:55067] Updated by Heesob Park about 3 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