Project

General

Profile

Actions

Bug #8427

closed

gets method truncates strings longer than 255 characters in Windows 7

Added by jen (Jen Marsh) almost 11 years ago. Updated over 4 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) 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.

Actions

Also available in: Atom PDF

Like0
Like0Like0