Project

General

Profile

Actions

Backport #7379

closed

Unexpected result of Kernel#gets on Windows 8

Added by phasis68 (Heesob Park) over 11 years ago. Updated about 11 years ago.

Status:
Closed
[ruby-core:49479]

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 @@ rb_w32_read(int fd, void *buf, size_t size)
}

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

Updated by luislavena (Luis Lavena) over 11 years ago

  • Category set to core
  • Status changed from Open to Assigned
  • Assignee set to usa (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.

Updated by usa (Usaku NAKAMURA) over 11 years ago

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

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

Updated by phasis68 (Heesob Park) over 11 years 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.

Updated by luislavena (Luis Lavena) over 11 years ago

On Mon, Nov 19, 2012 at 9:56 AM, phasis68 (Heesob Park)
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 @@ rb_w32_read(int fd, void *buf, size_t size)
}

 ret = 0;
  • isconsole = is_console(_osfhnd(fd));
  • isconsole = is_console(_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

Updated by usa (Usaku NAKAMURA) over 11 years 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 :)

Actions #6

Updated by usa (Usaku NAKAMURA) over 11 years 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 (rb_w32_read): Windows 8 fixed one of a bug of console
    API.
    based on the patch by Heesob Park at [ruby-core:49479] [Bug #7379]
Actions #7

Updated by usa (Usaku NAKAMURA) about 11 years ago

  • Tracker changed from Bug to Backport
  • Project changed from Ruby master to Backport193
  • Category deleted (core)
  • Status changed from Closed to Assigned
  • Target version deleted (2.0.0)

See [ruby-list:49247]

Actions #8

Updated by usa (Usaku NAKAMURA) about 11 years 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 [ruby-core:49479] [Bug #7379]
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0