[#30408] Ruby 1.8.6 preview2 has been released — "Akinori MUSHA" <knu@...>

 Ruby 1.8.6 preview2 をリリースしました。

20 messages 2007/02/24
[#30414] fail to autoload at $SAFE==4 (Re: Ruby 1.8.6 preview2 has been released) — Hidetoshi NAGAI <nagai@...> 2007/02/25

永井@知能.九工大です.

[#30418] Re: fail to autoload at $SAFE==4 (Re: Ruby 1.8.6 preview2 has been released) — Nobuyoshi Nakada <nobu@...> 2007/02/25

なかだです。

[ruby-dev:30445] Re: MIME decoding confused by non-MIME characters

From: "H.Holon" <holon@...>
Date: 2007-02-27 18:08:08 UTC
List: ruby-dev #30445
   相馬です。

連続ですみません。testを完了しました。一応、defaultの test-all
では問題ないようです。(ただ、drbで止まりますので、そこだけ
は checkしていません)

# 先程のではタブ変換がおかしかったようですので添付ファイル
# にしておきます。(Apple Mailの仕業かな)

 しかし、そこで新しく気になる点が。
openssl enc -base64 -d で base64を decodeしてみると、
78文字あたりで制限があり、それより長い文字列であった
場合に切りとられてしまうようです。

一応、RFC2045を見てはみたのですが、base64変換では1行
あたりの文字数制限はないようです。
そのため、この patchでもそういう制限はつけていませんが
多少気になりました。
 そのあたり詳しいかたがおられましたらチェックお願い
します。


   それと、test-allをしていて、他の部分で 2箇所ほど気になりました。
1つは、ruby/test_stringchar.rb 110行付近、Regexp.quoteのテスト
がありますが、ここが0x80以上のときにうちの環境では errorになり
ます。 re.cの rb_reg_quote()を見てみましたが、ismbchar()で判別して
いる部分が気になります。

 もう1つ、ruby/test_system.rbの test_syntax でも、eucのファイル
で syntax errorを起こしてしまうようです。こちらはまだ追っていま
せんのでドコかはわかりませんが、charsetは valid_syntax?で処理
すべきか、file読み込みで処理すべきかは気になります。

# 現在はファイルに -K optionがついていませんので fileの文字列
# から charsetを判別するしかないので不安定かもしれません。
 
以上、MacOSX 10.4.8 - MacBook - ruby1.8.5-p12(sourceから)
の環境での結果です。
 みなさま確認のほど宜しくお願いします。


----
SOUMA Yutaka (H.Holon) [ holon@radastery.jp | http://radastery.jp/ ]

Attachments (1)

pack.c.diff (1.4 KB, text/x-diff)
--- pack.c.old	2007-02-27 21:18:41.000000000 +0900
+++ pack.c	2007-02-28 02:44:49.000000000 +0900
@@ -1803,20 +1803,27 @@
 		    }
 		}
 		while (s < send) {
-		    while (s[0] == '\r' || s[0] == '\n') { s++; }
-		    if ((a = b64_xtable[(int)s[0]]) == -1) break;
-		    if ((b = b64_xtable[(int)s[1]]) == -1) break;
-		    if ((c = b64_xtable[(int)s[2]]) == -1) break;
-		    if ((d = b64_xtable[(int)s[3]]) == -1) break;
+		    a = b = c = d = -1;
+		    while((a = b64_xtable[(int)(*(unsigned char*)s)]) == -1 && s < send) { s++; }
+		    if( s >= send ) break;
+		    s++;
+		    while((b = b64_xtable[(int)(*(unsigned char*)s)]) == -1 && s < send) { s++; }
+		    if( s >= send ) break;
+		    s++;
+		    while((c = b64_xtable[(int)(*(unsigned char*)s)]) == -1 && s < send) { if( *s == '=' ) break; s++; }
+		    if( *s == '=' || s >= send ) break;
+		    s++;
+		    while((d = b64_xtable[(int)(*(unsigned char*)s)]) == -1 && s < send) { if( *s == '=' ) break; s++; }
+		    if( *s == '=' || s >= send ) break;
+		    s++;
 		    *ptr++ = a << 2 | b >> 4;
 		    *ptr++ = b << 4 | c >> 2;
 		    *ptr++ = c << 6 | d;
-		    s += 4;
 		}
 		if (a != -1 && b != -1) {
-		    if (s + 2 < send && s[2] == '=')
+		    if (c == -1 && *s == '=')
 			*ptr++ = a << 2 | b >> 4;
-		    if (c != -1 && s + 3 < send && s[3] == '=') {
+		    else if (c != -1 && *s == '=') {
 			*ptr++ = a << 2 | b >> 4;
 			*ptr++ = b << 4 | c >> 2;
 		    }

In This Thread