Bug #2369

ENV's strange behavior on WinXP

Added by _ wanabe almost 6 years ago. Updated over 4 years ago.

Status:Rejected
Priority:Normal
Assignee:Usaku NAKAMURA
ruby -v:ruby 1.9.2dev (2009-11-14 trunk 25768) [i386-mingw32] Backport:

Description

=begin
Windows XP SP2 環境の Mingw で、環境変数に最大文字数に近い長さの値か
または最大文字数を超えた長さの値を設定しようとした場合の挙動がおかしいようです。
確認用のスクリプトを添付します。

スクリプトのコメントに書きましたとおり、
32767 文字よりやや短い値をセットすると値が正しく取り出せません。
GetEnvironmentVariableAで確認すると正しく取り出せているようです。

また、32767 文字を超えた値を何度もセットすると SEGV します。
恐らくこのために、make test-all が TestRequire#test_require_too_long_filename か
あるいは数個先の TestRipper_Generic#test_parse_files 等で落ちます。

根本的には前者は kernel32.dll、後者は msvcrt.dll のバグだとは思うのですが、
よろしければ対策をお願いいたします。
=end

test.rb Magnifier (567 Bytes) _ wanabe, 11/15/2009 02:11 PM

History

#1 Updated by Usaku NAKAMURA almost 6 years ago

  • Status changed from Open to Assigned
  • Assignee set to Usaku NAKAMURA

=begin

=end

#2 Updated by Usaku NAKAMURA almost 6 years ago

=begin
(単なるメモです)

Windows 7でrubyのバージョンによらず再現せず。
=end

#3 Updated by Usaku NAKAMURA almost 6 years ago

=begin
(単なるメモです)

XP SP3で確認。
msvcrtは関係なし。GetEnvironmentStrings()らしい。
=end

#4 Updated by Usaku NAKAMURA almost 6 years ago

=begin
(単なるメモです)

前者はGetEnvironmentStringsA()のバグ。Wを使えば回避可能ではある。
後者はさっきのは私の勘違いで、msvcrtのputenv()のバグ。1.9.1ではputenv()使ってないので落ちはしない。
=end

#5 Updated by Usaku NAKAMURA almost 6 years ago

  • Priority changed from Normal to 3

=begin

=end

#6 Updated by Usaku NAKAMURA almost 6 years ago

=begin
(単なるメモです)

Vistaでも問題なし。
対応すべきかどうか微妙になってきました。
=end

#7 Updated by _ wanabe over 5 years ago

=begin
Vista/7 で再現しないことと、32767 文字近い環境変数など普通は扱わないこと、
実用的なケースでこの件が問題になったわけでなくテストケース上だけだということを考えると
Reject が妥当のように思えてきましたのでそうします。
失礼しました。
=end

#8 Updated by _ wanabe over 5 years ago

  • Status changed from Assigned to Rejected

=begin

=end

Also available in: Atom PDF