[#37248] [Feature:1.9] Enumerator#inspect — "Yusuke ENDOH" <mame@...>

遠藤です。

12 messages 2008/12/02

[#37337] [Feature #841] Object#self — "rubikitch ." <redmine@...>

Feature #841: Object#self

13 messages 2008/12/09

[#37513] Current status of 1.9.1 RC1's issues — "Yugui (Yuki Sonoda)" <yugui@...>

Hi, folks

14 messages 2008/12/20
[#37516] Re: Current status of 1.9.1 RC1's issues — Masatoshi SEKI <m_seki@...> 2008/12/20

咳といいます。

[#37576] [BUG:trunk] encoding for stdio's — "Yugui (Yuki Sonoda)" <yugui@...>

Yuguiです。

11 messages 2008/12/24

[ruby-dev:37650] Re: [Bug #943] Segmentation fault (cygwin)

From: Martin Duerst <duerst@...>
Date: 2008-12-29 08:07:21 UTC
List: ruby-dev #37650
笹田さん、こんにちは。

At 16:18 08/12/29, SASADA Koichi wrote:
> ささだです.
>
>Martin Du"rst wrote::
>> 次のスクリプトが Segmentation fault (core dumped) で終わります。
>> 
>> ruby -e 'puts "A=["; 0.upto(1000000) { puts "  [22, 55]," }; puts "]"' | ruby
>> 
>> [ruby-dev:37611] で報告した問題を簡単化しました。問題は左側の ruby のではなく、
>> 右側の ruby で起こります。
>
> スタックオーバーフローチェックが足りていませんでした.多分,これで直り
>ます.手元では直りました.[ruby-dev:37611] のほうは試していないのです
>が,見てもらえませんか.

以下の修正で上記の問題も [ruby-dev:37611] も直っています。
というのは、Segmentation fault から SystemStackError に
変わっただけです。その方がいいですので、是非下記のパッチを
コミットしてください。

しかし、真っ平らなデータを読み込むだけでスタックがこんなに伸びる
のはなぜでしょうか。上記のスクリプトを

ruby -e 'puts "A=[]"; 0.upto(1000000) { puts "A<<[22, 55]" }' | ruby

に直すと、時間がかかるものの、問題なく完成されます。

よろしくお願いします。     Martin.

>Index: vm.c
>===================================================================
>--- vm.c       (リビジョン 21150)
>+++ vm.c       (作業コピー)
>@@ -77,6 +77,8 @@ vm_set_top_stack(rb_thread_t * th, VALUE
>     vm_push_frame(th, iseq, VM_FRAME_MAGIC_TOP,
>                 th->top_self, 0, iseq->iseq_encoded,
>                 th->cfp->sp, 0, iseq->local_size);
>+
>+        CHECK_STACK_OVERFLOW(th->cfp, iseq->stack_max);
> }
>
> static void
>@@ -95,6 +97,8 @@ vm_set_eval_stack(rb_thread_t * th, VALU
>     if (cref) {
>       th->cfp->dfp[-1] = (VALUE)cref;
>     }
>+
>+    CHECK_STACK_OVERFLOW(th->cfp, iseq->stack_max);
> }
>
> static void
>@@ -116,6 +120,8 @@ vm_set_main_stack(rb_thread_t *th, VALUE
>     if (bind && iseq->local_size > 0) {
>       bind->env = vm_make_env_object(th, th->cfp);
>     }
>+
>+    CHECK_STACK_OVERFLOW(th->cfp, iseq->stack_max);
> }
>
> rb_control_frame_t *
>
>
>-- 
>// SASADA Koichi at atdot dot net


#-#-#  Martin J. Du"rst, Assoc. Professor, Aoyama Gakuin University
#-#-#  http://www.sw.it.aoyama.ac.jp       mailto:duerst@it.aoyama.ac.jp     


In This Thread