Project

General

Profile

Actions

Bug #8427

closed

gets method truncates strings longer than 255 characters in Windows 7

Bug #8427: gets method truncates strings longer than 255 characters in Windows 7

Added by jen (Jen Marsh) over 12 years ago. Updated about 6 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.0.0p195 (2013-05-14) [x64-mingw32]
Backport:
[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.

Updated by phasis68 (Heesob Park) over 12 years ago Actions #1 [ruby-core:55067]

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) about 6 years ago Actions #2 [ruby-core:94369]

  • 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.

Actions

Also available in: PDF Atom