[#37050] [Feature #735] Date#inspect — "rubikitch ." <redmine@...>

Feature #735: Date#inspect

14 messages 2008/11/09

[#37075] [Feature #747] /\A/u ignores BOM — Shyouhei Urabe <redmine@...>

Feature #747: /\A/u ignores BOM

14 messages 2008/11/12

[#37161] m17n of irb — "Yugui (Yuki Sonoda)" <yugui@...>

Yuguiです。

35 messages 2008/11/24
[#37183] Re: m17n of irb — keiju@... (keiju ISHITSUKA) 2008/11/25

けいじゅ@いしつかです.

[#37203] Re: m17n of irb — "Yugui (Yuki Sonoda)" <yugui@...> 2008/11/26

keiju ISHITSUKA さんは書きました:

[#37292] Re: m17n of irb — Yukihiro Matsumoto <matz@...> 2008/12/06

まつもと ゆきひろです

[#37293] Re: m17n of irb — "Yugui (Yuki Sonoda)" <yugui@...> 2008/12/07

Yuguiです。

[#37298] Re: m17n of irb — Yukihiro Matsumoto <matz@...> 2008/12/07

まつもと ゆきひろです

[#37210] RSS::Maker.create(version) — "Akinori MUSHA" <knu@...>

 RSS::Maker で、 "2.0" 等の文字列でフィードのフォーマットを渡す

15 messages 2008/11/27

[#37213] Re: [ruby-cvs:27586] Ruby:r20368 (trunk): * ext/bigdecimal/bigdecimal.c (BigDecimal_div2): should return — Tadayoshi Funaba <tadf@...>

> * ext/bigdecimal/bigdecimal.c (BigDecimal_div2): should return

8 messages 2008/11/27

[ruby-dev:37141] Re: [Bug:1.9] 1+1+1+...+1 dumps core

From: "U.Nakamura" <usa@...>
Date: 2008-11-21 12:05:40 UTC
List: ruby-dev #37141
こんにちは、なかむら(う)です。

というわけで、疑問は解消したので、

In message "[ruby-dev:37133] Re: [Bug:1.9] 1+1+1+...+1 dumps core"
    on Nov.21,2008 15:12:37, <usa@garbagecollect.jp> wrote:
> > もしかしてcall_cfuncで構造化例外を捕まえてSystemStackErrorに変換したりで
> > きます?
> 
> call_cfuncじゃなくてrb_iseq_evalの中身あたりをくくるのがいい
> んじゃないかと思いますが、まあそうです。

という方針でパッチ書いてみました。
# なんかびみょーにcontrol frameの中身が違いますね。

C:\>miniruby -e "eval('1+'*100000+'1')"
-e:1: [BUG] Segmentation fault
ruby 1.9.0 (2008-11-19 revision 20257) [i386-mswin32]

-- control frame ----------
c:0004 p:---- s:0010 b:0010 l:000009 d:000009 CFUNC  :eval
c:0003 p:0017 s:0006 b:0006 l:000005 d:000005 TOP    -e:1
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:0000 s:0002 b:0002 l:000001 d:000001 TOP
---------------------------
-e:1:in `eval': stack level too deep (SystemStackError)
        from -e:1:in `<main>'

Index: vm.c
===================================================================
--- vm.c	(revision 20257)
+++ vm.c	(working copy)
@@ -1231,6 +1231,16 @@ vm_exec(rb_thread_t *th)
 
 /* misc */
 
+#ifdef _WIN32
+static void
+w32_check_stack_overflow(DWORD code)
+{
+    if (code == EXCEPTION_STACK_OVERFLOW) {
+	raise(SIGSEGV);
+    }
+}
+#endif
+
 VALUE
 rb_iseq_eval(VALUE iseqval)
 {
@@ -1243,7 +1253,17 @@ rb_iseq_eval(VALUE iseqval)
     if (!rb_const_defined(rb_cObject, rb_intern("TOPLEVEL_BINDING"))) {
 	rb_define_global_const("TOPLEVEL_BINDING", rb_binding_new());
     }
+#ifdef _WIN32
+    __try {
+#endif
     val = vm_exec(th);
+#ifdef _WIN32
+    }
+    __except(w32_check_stack_overflow(GetExceptionCode()),
+	     EXCEPTION_CONTINUE_SEARCH) {
+	/* never comes here */
+    }
+#endif
     tmp = iseqval; /* prohibit tail call optimization */
     return val;
 }

それでは。
-- 
U.Nakamura <usa@garbagecollect.jp>


In This Thread