Bug #8427
closedgets method truncates strings longer than 255 characters in Windows 7
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.
Updated by phasis68 (Heesob Park) almost 11 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 */
Updated by jeremyevans0 (Jeremy Evans) over 4 years ago
- Status changed from Open to Closed
- Backport deleted (
1.9.3: UNKNOWN, 2.0.0: UNKNOWN)
I tried using gets
with a string with 300 characters on Windows 10, and was not able to reproduce the error (no string truncation). I tried with various versions of Ruby as far back as 1.9.3. I'm not sure if this is still a problem on Windows 7 or not with the master branch, but Windows 7 is almost out of support. If anyone is still affected by this issue, please post here and we can reopen.