Bug #8427

gets method truncates strings longer than 255 characters in Windows 7

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

Target version:
ruby -v:
ruby 2.0.0p195 (2013-05-14) [x64-mingw32]


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 6 years ago

This bug is caused by changesets r28035, r29980 and r30280.

Here is a possible workaround patch:

diff --git a/win32.c b/
index 318af2f..b821cd4 100644
--- a/win32.c
+++ b/
@@ -6058,6 +6058,10 @@ rb_w32_read(int fd, void *buf, size_t size)
DWORD 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) 6 months ago

  • Backport deleted (1.9.3: UNKNOWN, 2.0.0: UNKNOWN)
  • Status changed from Open to Closed

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.

Also available in: Atom PDF