From: Yusuke ENDOH Date: 2008-09-18T21:14:33+09:00 Subject: [ruby-dev:36373] [Bug:1.9] nkf may cause memory violation 遠藤です。 以下のように nkf にパッチをあてて Index: ext/nkf/nkf-utf8/nkf.c =================================================================== --- ext/nkf/nkf-utf8/nkf.c (revision 19412) +++ ext/nkf/nkf-utf8/nkf.c (working copy) @@ -1482,6 +1482,7 @@ } if (cp932inv_f && CP932INV_TABLE_BEGIN <= c2 && c2 <= CP932INV_TABLE_END){ + printf("access cp932inv[%d][%d]\n", c2 - CP932INV_TABLE_BEGIN, c1 - 0x40); nkf_char c = cp932inv[c2 - CP932INV_TABLE_BEGIN][c1 - 0x40]; if (c){ c2 = c >> 8; 以下を実行すると $ ./ruby -rnkf -e 'NKF.nkf("-Sw", [0xee, 0xff].pack("C*"))' access cp932inv[1][191] となりますが、cp932inv の型は extern const unsigned short cp932inv[2][189]; であるため、アクセス違反をしていると思います。 確認はしてないですが、もう一か所の cp932inv のアクセスと shiftjis_cp932 のアクセスも同じ問題が起きそうな気がします。 -- Yusuke ENDOH