[#45311] 開発会議 — SASADA Koichi <ko1@...>
笹田です.
10 messages
2012/03/06
[#45312] Re: 開発会議
— "ayumu.aizawa@..." <ayumu.aizawa@...>
2012/03/06
US=1B$B$K$$$k$N$G!"=1B(BSkype=1B$B$H$+=1B(BFaceTime=1B$B$G;22C$7$?$$$G$9!#=1B=
[#45341] 非同期割り込みに対する対処案(日本語版) — SASADA Koichi <ko1@...>
ささだです.
28 messages
2012/03/11
[#45816] Re: 非同期割り込みに対する対処案(日本語版)
— SASADA Koichi <ko1@...>
2012/06/25
ささだです.
[#45817] Re: 非同期割り込みに対する対処案(日本語版)
— Tanaka Akira <akr@...>
2012/06/25
2012年6月25日 18:26 SASADA Koichi <ko1@atdot.net>:
[#45819] Re: 非同期割り込みに対する対処案(日本語版)
— SASADA Koichi <ko1@...>
2012/06/25
ささだです.
[#45820] Re: 非同期割り込みに対する対処案(日本語版)
— Tanaka Akira <akr@...>
2012/06/25
2012年6月25日 19:39 SASADA Koichi <ko1@atdot.net>:
[#45827] Re: 非同期割り込みに対する対処案(日本語版)
— SASADA Koichi <ko1@...>
2012/06/25
(2012/06/25 20:32), Tanaka Akira wrote:
[#45835] Re: 非同期割り込みに対する対処案(日本語版)
— KOSAKI Motohiro <kosaki.motohiro@...>
2012/06/25
> の3つになるような気がしていますので,ある例外がこれら 3 つのどの状態に
[#45841] Re: 非同期割り込みに対する対処案(日本語版)
— Tanaka Akira <akr@...>
2012/06/25
2012年6月26日 3:40 SASADA Koichi <ko1@atdot.net>:
[#45844] Re: 非同期割り込みに対する対処案(日本語版)
— SASADA Koichi <ko1@...>
2012/06/25
(2012/06/26 5:07), Tanaka Akira wrote:
[#45871] Re: 非同期割り込みに対する対処案(日本語版)
— Tanaka Akira <akr@...>
2012/06/29
2012年6月26日 5:15 SASADA Koichi <ko1@atdot.net>:
[#45372] Marshal.dumpにおけるインスタンス変数の取り扱いについて — keiju@... (Keiju ISHITSUKA)
けいじゅ@いしつかです.
14 messages
2012/03/16
[#45376] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて
— Yukihiro Matsumoto <matz@...>
2012/03/17
まつもと ゆきひろです
[#45377] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて
— keiju@... (石塚圭樹)
2012/03/17
けいじゅ@いしつかです.
[#45381] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて
— Yukihiro Matsumoto <matz@...>
2012/03/17
まつもと ゆきひろです
[#45399] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて
— keiju@... (石塚圭樹)
2012/03/18
けいじゅ@いしつかです.
[#45401] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて
— Tanaka Akira <akr@...>
2012/03/19
2012年3月19日5:54 石塚圭樹 <keiju@ishitsuka.com>:
[#45405] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて
— keiju@... (石塚圭樹)
2012/03/19
けいじゅ@いしつかです.
[#45451] [ruby-trunk - Feature #6218][Open] struct.cのrb_struct_s_members_m()について — "Glass_saga (Masaki Matsushita)" <glass.saga@...>
6 messages
2012/03/28
[ruby-dev:45331] [ruby-trunk - Bug #5635] String#unpack("M") の不正データ時の振る舞い
From:
Koichi Sasada <redmine@...>
Date:
2012-03-11 07:49:15 UTC
List:
ruby-dev #45331
Issue #5635 has been updated by Koichi Sasada.
Assignee set to Yui NARUSE
----------------------------------------
Bug #5635: String#unpack("M") の不正データ時の振る舞い
https://bugs.ruby-lang.org/issues/5635
Author: Masahiro Tomita
Status: Open
Priority: Normal
Assignee: Yui NARUSE
Category:
Target version:
ruby -v: ruby 1.9.3p0 (2011-11-08 revision 33661) [i686-linux]
String#unpack("M") で "=hoge" みたいな不正なデータがあった場合、現在は
そこで処理を中断してしまっていますが、それ以降のデータをすべて捨ててし
まうのはかわいそうなので、ポインタを一つ進めて処理を継続した方がいいん
じゃないかと思うのですがどうでしょうか。
RFC2045 には次のような記述があります。
(2) An "=" followed by a character that is neither a
hexadecimal digit (including "abcdef") nor the CR
character of a CRLF pair is illegal. This case can be
the result of US-ASCII text having been included in a
quoted-printable part of a message without itself
having been subjected to quoted-printable encoding. A
reasonable approach by a robust implementation might be
to include the "=" character and the following
character in the decoded data without any
transformation and, if possible, indicate to the user
that proper decoding was not possible at this point in
the data.
Index: pack.c
===================================================================
--- pack.c (リビジョン 33758)
+++ pack.c (作業コピー)
@@ -2008,20 +2008,23 @@
while (s < send) {
if (*s == '=') {
- if (++s == send) break;
- if (s+1 < send && *s == '\r' && *(s+1) == '\n')
- s++;
- if (*s != '\n') {
- if ((c1 = hex2num(*s)) == -1) break;
- if (++s == send) break;
- if ((c2 = hex2num(*s)) == -1) break;
- *ptr++ = c1 << 4 | c2;
+ if (s+1 < send && *(s+1) == '\n') {
+ s += 2;
+ continue;
+ }
+ if (s+2 < send) {
+ if (*(s+1) == '\r' && *(s+2) == '\n') {
+ s += 3;
+ continue;
+ }
+ if ((c1 = hex2num(*(s+1))) > -1 && (c2 = hex2num(*(s+2))) > -1) {
+ *ptr++ = c1 << 4 | c2;
+ s += 3;
+ continue;
+ }
}
}
- else {
- *ptr++ = *s;
- }
- s++;
+ *ptr++ = *s++;
}
rb_str_set_len(buf, ptr - RSTRING_PTR(buf));
ENCODING_CODERANGE_SET(buf, rb_ascii8bit_encindex(), ENC_CODERANGE_VALID);
Index: test/ruby/test_pack.rb
===================================================================
--- test/ruby/test_pack.rb (リビジョン 33758)
+++ test/ruby/test_pack.rb (作業コピー)
@@ -612,6 +612,17 @@
assert_equal([0x100000000], "\220\200\200\200\000".unpack("w"), [0x100000000])
end
+ def test_pack_unpack_M
+ assert_equal(["pre123after"], "pre=31=32=33after".unpack("M"))
+ assert_equal(["preafter"], "pre=\nafter".unpack("M"))
+ assert_equal(["preafter"], "pre=\r\nafter".unpack("M"))
+ assert_equal(["pre="], "pre=".unpack("M"))
+ assert_equal(["pre=\r"], "pre=\r".unpack("M"))
+ assert_equal(["pre=hoge"], "pre=hoge".unpack("M"))
+ assert_equal(["pre=1after"], "pre==31after".unpack("M"))
+ assert_equal(["pre==1after"], "pre===31after".unpack("M"))
+ end
+
def test_modify_under_safe4
s = "foo"
assert_raise(SecurityError) do
--
http://bugs.ruby-lang.org/