Backport #7379

Unexpected result of Kernel#gets on Windows 8

Added by Heesob Park over 1 year ago. Updated about 1 year ago.

[ruby-core:49479]
Status:Closed
Priority:Normal
Assignee:Usaku NAKAMURA

Description

I found Kernel#gets returns invalid result for multi-byte string on Windows 8.

C:\Users\phasis>ruby -ve 'p gets'
ruby 2.0.0dev (2012-11-17 trunk 37691) [i386-mswin32_110]
한글
"\xC7\x00\xB1\x00\n"

After some debugging,I noticed that the previous ReadFile bug on console was fixed on Windows 8.
So the workaround code should be skipped on Windows 8.

Here is a patch:
cf. The OS version number of Windows 8 and Windows Server 2012 is 6.2.

diff --git a/win32.c b/win32.c.new
index 3446728..5635058 100644
--- a/win32.c
+++ b/win32.c.new
@@ -5902,7 +5902,7 @@ rbw32read(int fd, void *buf, size_t size)
}

 ret = 0;
  • isconsole = isconsole(osfhnd(fd));
  • isconsole = isconsole(osfhnd(fd)) && !(osver.dwMajorVersion==6 && osver.dwMinorVersion==2); if (isconsole) { DWORD mode; GetConsoleMode((HANDLE)_osfhnd(fd),&mode);

Associated revisions

Revision 40051
Added by Usaku NAKAMURA about 1 year ago

merge revision(s) 37743: [Backport #7379]

* win32/win32.c (rb_w32_read): Windows 8 fixed one of a bug of console
  API.
  based on the patch by Heesob Park at  [Bug #7379]

History

#1 Updated by Luis Lavena over 1 year ago

  • Category set to core
  • Status changed from Open to Assigned
  • Assignee set to Usaku NAKAMURA
  • Target version set to 2.0.0

Hello Park,

I don't have Windows 8 right now to test, but is great to hear this got fixed (finally).

I'm assigning to Nakamura-san for approval.

Thank you.

#2 Updated by Usaku NAKAMURA over 1 year ago

I don't have Win8, too.
But, I rely Park-san.

Haven't you be a committer yet, Park-san?

#3 Updated by Heesob Park over 1 year ago

Is there anybody who has Windows 8 among committers?

As I mentioned at http://bugs.ruby-lang.org/issues/7352,
I don't want to be a committer.

#4 Updated by Luis Lavena over 1 year ago

On Mon, Nov 19, 2012 at 9:56 AM, phasis68 (Heesob Park)
phasis@gmail.com wrote:

Issue #7379 has been updated by phasis68 (Heesob Park).

Is there anybody who has Windows 8 among committers?

I don't have Windows 8 final right now to test, but I do have a
previous version, which I'm setting up in a VM.

Will take a look later today.

As I mentioned at http://bugs.ruby-lang.org/issues/7352,
I don't want to be a committer.


Bug #7379: Unexpected result of Kernel#gets on Windows 8
https://bugs.ruby-lang.org/issues/7379#change-33096

Author: phasis68 (Heesob Park)
Status: Assigned
Priority: Normal
Assignee: usa (Usaku NAKAMURA)
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-11-17 trunk 37691) [i386-mswin32_110]

I found Kernel#gets returns invalid result for multi-byte string on Windows 8.

C:\Users\phasis>ruby -ve 'p gets'
ruby 2.0.0dev (2012-11-17 trunk 37691) [i386-mswin32_110]
한글
"\xC7\x00\xB1\x00\n"

After some debugging,I noticed that the previous ReadFile bug on console was fixed on Windows 8.
So the workaround code should be skipped on Windows 8.

Here is a patch:
cf. The OS version number of Windows 8 and Windows Server 2012 is 6.2.

diff --git a/win32.c b/win32.c.new
index 3446728..5635058 100644
--- a/win32.c
+++ b/win32.c.new
@@ -5902,7 +5902,7 @@ rbw32read(int fd, void *buf, size_t size)
}

 ret = 0;
  • isconsole = isconsole(osfhnd(fd));
  • isconsole = isconsole(osfhnd(fd)) && !(osver.dwMajorVersion==6 && osver.dwMinorVersion==2); if (isconsole) { DWORD mode; GetConsoleMode((HANDLE)_osfhnd(fd),&mode);

http://bugs.ruby-lang.org/

--
Luis Lavena
AREA 17
-
Perfection in design is achieved not when there is nothing more to add,
but rather when there is nothing more to take away.
Antoine de Saint-Exupéry

#5 Updated by Usaku NAKAMURA over 1 year ago

The priority of Windows8 was not so high for me.
However, it seems that it is necessary to change the priority.
I did not expect that Microsoft corrected the bug of console API now :)

#6 Updated by Usaku NAKAMURA over 1 year ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r37743.
Heesob, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • win32/win32.c (rbw32read): Windows 8 fixed one of a bug of console API. based on the patch by Heesob Park at [Bug #7379]

#7 Updated by Usaku NAKAMURA about 1 year ago

  • Tracker changed from Bug to Backport
  • Project changed from ruby-trunk to Backport93
  • Category deleted (core)
  • Status changed from Closed to Assigned
  • Target version deleted (2.0.0)

See

#8 Updated by Usaku NAKAMURA about 1 year ago

  • Status changed from Assigned to Closed

This issue was solved with changeset r40051.
Heesob, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


merge revision(s) 37743: [Backport #7379]

* win32/win32.c (rb_w32_read): Windows 8 fixed one of a bug of console
  API.
  based on the patch by Heesob Park at  [Bug #7379]

Also available in: Atom PDF