[#44289] [Ruby 1.9 - Feature #5128][Open] 日本語ドキュメントをUTF-8に — Shyouhei Urabe <shyouhei@...>
34 messages
2011/08/01
[#44290] Re: [Ruby 1.9 - Feature #5128][Open] 日本語ドキュメントをUTF-8に
— Kenta Murata <muraken@...>
2011/08/01
=E3=82=80=E3=82=89=E3=81=9F=E3=81=A7=E3=81=99=E3=80=82 =20
[#44294] Re: [ruby-dev:44290] Re: [Ruby 1.9 - Feature #5128][Open] 日本語ドキュメントをUTF-8に
— KOSAKI Motohiro <kosaki.motohiro@...>
2011/08/01
(2011/08/01 11:10), Kenta Murata wrote:
[#44297] Re: [ruby-dev:44294] Re: [ruby-dev:44290] Re: [Ruby 1.9 - Feature #5128][Open] 日本語ドキュメントをUTF-8に
— "Martin J. Dürst" <duerst@...>
2011/08/01
On 2011/08/01 12:04, KOSAKI Motohiro wrote:
[#44293] [Ruby 1.9 - Feature #5128] 日本語ドキュメントをUTF-8に
— Nobuyoshi Nakada <nobu@...>
2011/08/01
[#44295] Re: [ruby-dev:44293] [Ruby 1.9 - Feature #5128] 日本語ドキュメントをUTF-8に
— Urabe Shyouhei <shyouhei@...>
2011/08/01
(08/01/2011 11:52 AM), Nobuyoshi Nakada wrote:
[#44299] Re: [Ruby 1.9 - Feature #5128] 日本語ドキュメントをUTF-8に
— Nobuyoshi Nakada <nobu@...>
2011/08/01
なかだです。
[#44302] Re: [Ruby 1.9 - Feature #5128] 日本語ドキュメントをUTF-8に
— KOSAKI Motohiro <kosaki.motohiro@...>
2011/08/01
(2011/08/01 13:28), Nobuyoshi Nakada wrote:
[#44382] Re: [Ruby 1.9 - Feature #5128] 日本語ドキュメントをUTF-8に
— Ayumu Aizawa <ayumu.aizawa@...>
2011/08/12
あいざわです
[#44390] Re: [Ruby 1.9 - Feature #5128] 日本語ドキュメントをUTF-8に
— Urabe Shyouhei <shyouhei@...>
2011/08/15
(08/12/2011 10:57 AM), Ayumu Aizawa wrote:
[#44392] Re: [Ruby 1.9 - Feature #5128] 日本語ドキュメントをUTF-8に
— Nobuyoshi Nakada <nobu@...>
2011/08/16
(11/08/15 17:41), Urabe Shyouhei wrote:
[#44393] Re: [Ruby 1.9 - Feature #5128] 日本語ドキュメントをUTF-8に
— "NARUSE, Yui" <naruse@...>
2011/08/16
2011年8月16日10:15 Nobuyoshi Nakada <nobu@ruby-lang.org>:
[#44418] [Ruby 1.9 - Feature #5128] 日本語ドキュメントをUTF-8に
— Ayumu AIZAWA <ayumu.aizawa@...>
2011/08/24
[#44431] Re: [ruby-dev:44418] [Ruby 1.9 - Feature #5128] 日本語ドキュメントをUTF-8に
— KOSAKI Motohiro <kosaki.motohiro@...>
2011/08/27
> あいざわです
[#44443] Re: [Ruby 1.9 - Feature #5128] 日本語ドキュメントをUTF-8に
— Ayumu Aizawa <ayumu.aizawa@...>
2011/09/01
あいざわです
[#44444] Re: [Ruby 1.9 - Feature #5128] 日本語ドキュメントをUTF-8に
— Urabe Shyouhei <shyouhei@...>
2011/09/01
誰からも文句が出ないのを見届けて今週中くらいを目安に卜部がpullします。
[#44445] Re: [Ruby 1.9 - Feature #5128] 日本語ドキュメントをUTF-8に
— KOSAKI Motohiro <kosaki.motohiro@...>
2011/09/01
> 誰からも文句が出ないのを見届けて今週中くらいを目安に卜部がpullします。
[#44446] Re: [Ruby 1.9 - Feature #5128] 日本語ドキュメントをUTF-8に
— Ayumu Aizawa <ayumu.aizawa@...>
2011/09/01
> 他のファイルもやる必要があるという話なので、自分でコミットしてもらったほうが
[#44304] [Ruby 1.9 - Feature #5133][Open] Array#unzip as an alias of Array#transpose — Kenta Murata <muraken@...>
6 messages
2011/08/01
[#44315] [Ruby 1.9 - Bug #5139][Open] sigsegv のスタックオーバフロー — Tomoyuki Chikanaga <nagachika00@...>
18 messages
2011/08/02
[#44329] [Ruby 1.9 - Bug #5151][Open] test/socket/test_socket.rb fail when udp connection failed — Ayumu AIZAWA <ayumu.aizawa@...>
16 messages
2011/08/02
[#44337] [Ruby 1.9 - Bug #5152][Open] TestDateNew#test_civil が GC.stress = true 下で Failure — Tomoyuki Chikanaga <nagachika00@...>
4 messages
2011/08/03
[#44368] [Ruby 1.9 - Feature #5180][Open] net/http の接続時に用いる IP アドレスの指定 — Yui NARUSE <naruse@...>
15 messages
2011/08/10
[#44378] [Ruby 1.9 - Feature #5180] net/http の接続時に用いる IP アドレスの指定
— Kazuhiro NISHIYAMA <redmine@...>
2011/08/11
[#44370] [Ruby 1.9 - Feature #5180] net/http の接続時に用いる IP アドレスの指定
— Yui NARUSE <naruse@...>
2011/08/10
[#44371] Re: [Ruby 1.9 - Feature #5180] net/http の接続時に用いる IP アドレスの指定
— Tanaka Akira <akr@...>
2011/08/10
2011年8月10日15:05 Yui NARUSE <naruse@airemix.jp>:
[#44372] Re: [Ruby 1.9 - Feature #5180] net/http の接続時に用いる IP アドレスの指定
— "NARUSE, Yui" <naruse@...>
2011/08/10
2011年8月10日15:20 Tanaka Akira <akr@fsij.org>:
[#44413] [Ruby 1.9 - Bug #5217][Open] lineno is broken when source code has about 7000 lines — Yusuke Endoh <mame@...>
11 messages
2011/08/23
[#44416] [Ruby 1.9 - Bug #5217] lineno is broken when source code has about 7000 lines
— Hiroshi Nakamura <nakahiro@...>
2011/08/24
[#44417] Re: [Ruby 1.9 - Bug #5217] lineno is broken when source code has about 7000 lines
— Yusuke ENDOH <mame@...>
2011/08/24
遠藤です。
[ruby-dev:44438] [Ruby 1.9 - Bug #5249] C の Proc の比較のバグ
From:
Yui NARUSE <naruse@...>
Date:
2011-08-29 07:21:27 UTC
List:
ruby-dev #44438
Issue #5249 has been updated by Yui NARUSE.
Subject changed from ] C の Proc の比較のバグ to C の Proc の比較のバグ
Category set to core
ruby -v changed from - to ruby 1.9.3dev (2011-08-02 revision 32810) [i686-linux]
----------------------------------------
Bug #5249: C の Proc の比較のバグ
http://redmine.ruby-lang.org/issues/5249
Author: Anonymous
Status: Open
Priority: Normal
Assignee:
Category: core
Target version:
ruby -v: ruby 1.9.3dev (2011-08-02 revision 32810) [i686-linux]
芝と申します。
Proc#eq(C の関数は proc.c 内の proc_eq)で、C で定義した Proc
(rb_proc_new などを用いて定義)の比較を行う箇所に不具合があります。
C で定義した Proc に対しても iseq を見て比較を行っているため、メモリの状
況如何で segv を吐いたり false のはずが true になったりします。
問題となる proc_eq は以下のようになっていて、Proc の種類にかかわらず、
proc->block.iseq->iseq_size, proc->block.iseq->local_size,
proc->block.iseq->iseq を用いて比較しています。
proc->block.iseq が IFUNC_NODE だった場合は、関数ポインタの比較など、別
の方法で比較を行うべきです。
/* 問題の関数 */
static VALUE
proc_eq(VALUE self, VALUE other)
{
if (self == other) {
return Qtrue;
}
else {
if (rb_obj_is_proc(other)) {
rb_proc_t *p1, *p2;
GetProcPtr(self, p1);
GetProcPtr(other, p2);
if (p1->envval == p2->envval &&
p1->block.iseq->iseq_size == p2->block.iseq->iseq_size &&
p1->block.iseq->local_size == p2->block.iseq->local_size &&
MEMCMP(p1->block.iseq->iseq, p2->block.iseq->iseq, VALUE,
p1->block.iseq->iseq_size) == 0) {
return Qtrue;
}
}
}
return Qfalse;
}
添付する sample.zip に、proc_eq に対するパッチと問題となるコードの例をま
とめて入れておきます。
今回のパッチでは、RUBY_VM_IFUNC_P で C の Proc かどうかを判定し、proc 2
つが共に C の Proc だった場合は、node->nd_cfnc, node->nd_aid,
node->nd_tval で比較します。
参考にしていただければ幸いです。
よろしくお願いいたします。
/* パッチ */
diff --git proc.c proc.c
index 427d1fe..e304295 100644
--- proc.c
+++ proc.c
@@ -766,7 +766,18 @@ proc_eq(VALUE self, VALUE other)
rb_proc_t *p1, *p2;
GetProcPtr(self, p1);
GetProcPtr(other, p2);
- if (p1->envval == p2->envval &&
+ if (RUBY_VM_IFUNC_P(p1->block.iseq) &&
RUBY_VM_IFUNC_P(p2->block.iseq)) {
+ NODE *nd_ifunc1, *nd_ifunc2;
+
+ nd_ifunc1 = (NODE *)p1->block.iseq;
+ nd_ifunc2 = (NODE *)p2->block.iseq;
+ if(nd_ifunc1->nd_cfnc == nd_ifunc2->nd_cfnc &&
+ nd_ifunc1->nd_aid == nd_ifunc2->nd_aid &&
+ rb_funcall(nd_ifunc1->nd_tval, idEq, 1,
nd_ifunc2->nd_tval)) {
+ return Qtrue;
+ }
+ } else if (p1->envval == p2->envval &&
+ !RUBY_VM_IFUNC_P(p1->block.iseq) &&
!RUBY_VM_IFUNC_P(p2->block.iseq) &&
p1->block.iseq->iseq_size == p2->block.iseq->iseq_size &&
p1->block.iseq->local_size == p2->block.iseq->local_size &&
MEMCMP(p1->block.iseq->iseq, p2->block.iseq->iseq, VALUE,
--
http://redmine.ruby-lang.org