[#18440] racc segv revisited — "Akinori MUSHA" <knu@...>

 次のバグの件なんですが、現時点では原因究明を含めて未解決という

24 messages 2002/10/02
[#18617] Re: racc segv revisited — "Akinori MUSHA" <knu@...> 2002/11/02

At Wed, 2 Oct 2002 23:19:59 +0900,

[ruby-dev:18593] Re: embedded ruby interpreter friendly patch

From: nobu.nakada@...
Date: 2002-10-28 06:34:27 UTC
List: ruby-dev #18593
なかだです。

At Mon, 28 Oct 2002 11:52:22 +0900,
Yukihiro Matsumoto wrote:
>   * この修正は安全か?
> 
>     つまりこの修正によって悪い影響を受ける人がいる場合、採用
>     することはできません。ruby_stop()がexitせずにreturnする
>     ことはこれに引っかかるような気がします。

これは、ruby_stop()などは動作を変えずに新しいインターフェースを
追加することで避けられると思います。

>   * この修正は十分か?
> 
>     これに限らず現在のRubyの実装は組み込みに関して不十分です
>     (認識してます)。この修正を行ってもそれ以外の部分で期待に
>     そえず、今後も次々と修正を要求されるようなことになるので
>     はないかという心配があります。

実際に試してみないことには分からないので、できそうなところから
対応してみるというのもありのような気がします。組込みに対応して
いくつもりなら、ということですが。

それともRiteまでは保留?

# ヘッダとかは省略。


Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.344
diff -u -2 -p -r1.344 eval.c
--- eval.c	25 Oct 2002 18:39:29 -0000	1.344
+++ eval.c	28 Oct 2002 06:27:49 -0000
@@ -1230,6 +1230,6 @@ ruby_finalize()
 }
 
-void
-ruby_stop(ex)
+int
+ruby_cleanup(ex)
     int ex;
 {
@@ -1252,16 +1252,20 @@ ruby_stop(ex)
     POP_TAG();
     ruby_finalize();
-    exit(ex);
+    return ex;
 }
 
 void
-ruby_run()
+ruby_stop(ex)
+    int ex;
+{
+    exit(ruby_cleanup(ex));
+}
+
+int
+ruby_eval()
 {
     int state;
-    static int ex;
     volatile NODE *tmp;
 
-    if (ruby_nerrs > 0) exit(ruby_nerrs);
-
     Init_stack((void*)&tmp);
     PUSH_TAG(PROT_NONE);
@@ -1274,5 +1278,14 @@ ruby_run()
     POP_ITER();
     POP_TAG();
+    return ruby_cleanup(state);
+}
 
+void
+ruby_run()
+{
+    int state;
+    static int ex;
+    if (ruby_nerrs > 0) exit(ruby_nerrs);
+    state = ruby_eval();
     if (state && !ex) ex = state;
     ruby_stop(ex);


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread