[#46908] [ruby-trunk - Bug #7774][Assigned] IFUNC上のbinding呼び出しでSEGV — "ktsj (Kazuki Tsujimoto)" <kazuki@...>

16 messages 2013/02/03

[#47075] [ruby-trunk - Bug #7924][Open] r39232 以降 net/http で正しく reponse を取得出来ないケースがある — "hsbt (Hiroshi SHIBATA)" <shibata.hiroshi@...>

15 messages 2013/02/23

[ruby-dev:47060] [ruby-trunk - Bug #7892] MIME encoding bug of NKF.nkf

From: "naruse (Yui NARUSE)" <naruse@...>
Date: 2013-02-20 09:29:50 UTC
List: ruby-dev #47060
Issue #7892 has been updated by naruse (Yui NARUSE).


うーん……。

まず。どちらも元に戻らないので、バグです。
で、バグの根本的な原因は、「長い日本語 alphabets 日本語」という文字列をエンコードした際に、
「nVValphabets nV。縲阪→繝さ繝シ繝峨@縺溘>縺ィ縺薙m縲「=?ISO-2022-JP?B?blahblah?= alphabets<改行>nV。縲阪→縺ェ縺」縺ヲ縺励∪縺こ繝シ繧ケ繧想定していなかったから、ですね。

後述のパッチで直るような気もするんですが、根本的に改行戦略の考慮が足りてないので、
まじめにアルゴリズムを検討してとりあえずRubyで実装したいところですが、正直 MIME encode ってこれからも使います?

diff --git a/nkf.c b/nkf.c
index 705fb55..d3fde19 100644
--- a/nkf.c
+++ b/nkf.c
@@ -5421,28 +5421,6 @@ mime_putc(nkf_char c)
                mimeout_state.buf[mimeout_state.count++] = (char)c;
                return;
            }
-           if (nkf_isspace(c)) {
-               for (i=0;i<mimeout_state.count;i++) {
-                   if (SP<mimeout_state.buf[i] && mimeout_state.buf[i]<DEL) {
-                       eof_mime();
-                       for (i=0;i<mimeout_state.count;i++) {
-                           (*o_mputc)(mimeout_state.buf[i]);
-                           base64_count++;
-                       }
-                       mimeout_state.count = 0;
-                   }
-               }
-               mimeout_state.buf[mimeout_state.count++] = (char)c;
-               if (mimeout_state.count>MIMEOUT_BUF_LENGTH) {
-                   eof_mime();
-                   for (i=0;i<mimeout_state.count;i++) {
-                       (*o_mputc)(mimeout_state.buf[i]);
-                       base64_count++;
-                   }
-                   mimeout_state.count = 0;
-               }
-               return;
-           }
            if (mimeout_state.count>0 && SP<c && c!='=') {
                mimeout_state.buf[mimeout_state.count++] = (char)c;
                if (mimeout_state.count>MIMEOUT_BUF_LENGTH) {

----------------------------------------
Bug #7892: MIME encoding bug of NKF.nkf
https://bugs.ruby-lang.org/issues/7892#change-36666

Author: mrkn (Kenta Murata)
Status: Open
Priority: Normal
Assignee: naruse (Yui NARUSE)
Category: ext
Target version: next minor
ruby -v: ruby 2.0.0dev (2013-02-08 trunk 39161) [x86_64-darwin11.4.2]


NKF の MIME encoding の結果が 1.8 と 1.9/2.0 で異なってます。

# 1.8 の場合
$ /usr/bin/ruby -rnkf -ve "puts NKF.nkf('-jW -M --cp932', '「あああああああああああ by ああああああああああ」のレシピ')"
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin11.0]
「あああああああああああ by
 ああああああああああ」のレシピ

# 1.9.3-p385 の場合
$ ruby -rnkf -ve "puts NKF.nkf('-jW -M --cp932', '「あああああああああああ by ああああああああああ」のレシピ')"
ruby 1.9.3p385 (2013-02-06 revision 39114) [x86_64-darwin11.4.2]
「あああああああああああ by
 ああああああああああ」のレシピ

# 2.0.0-rc2 の場合
$ RBENV_VERSION=2.0.0-rc2 rbenv exec ruby -rnkf -ve "puts NKF.nkf('-jW -M --cp932', '「あああああああああああ by ああああああああああ」のレシピ')"
ruby 2.0.0dev (2013-02-08 trunk 39161) [x86_64-darwin11.4.2]
「あああああああああああ by
 ああああああああああ」のレシピ



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

In This Thread

Prev Next