[#21225] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

14 messages 2003/08/22
[#21227] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. — nobu.nakada@... 2003/08/22

なかだです。

[#21228] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. — matz@... (Yukihiro Matsumoto) 2003/08/22

まつもと ゆきひろです

[#21281] 大量メモリ消費攻撃に対する対応 — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

16 messages 2003/08/29
[#21285] Re: 大量メモリ消費攻撃に対する対応 — matz@... (Yukihiro Matsumoto) 2003/08/29

まつもと ゆきひろです

[#21288] Re: 大量メモリ消費攻撃に対する対応 — Hidetoshi NAGAI <nagai@...> 2003/08/29

永井@知能.九工大です.

[#21306] Re: 大量メモリ消費攻撃に対する対応 — matz@... (Yukihiro Matsumoto) 2003/09/03

まつもと ゆきひろです

[ruby-dev:21264] Re: Regexp#initializeが $SAFE==4 で落ちる

From: nobu.nakada@...
Date: 2003-08-26 09:29:18 UTC
List: ruby-dev #21264
なかだです。

At Tue, 26 Aug 2003 09:38:35 +0900,
Yukihiro Matsumoto wrote:
> |http://mput.dip.jp:8080/mput/?date=20030825#p02 の話です。
> |
> |rb_warnでwarningを表示しようとしたところでSecurityErrorに
> |なっているようです。
> 
> 仕様ではないかと。
> 
>   * $SAFE=4では出力は禁止
>   * 警告の出力は必要
> 
> ですから、警告を活かしたいなら$stderrを置き換える必要があり
> ますね。

rb_bug()でもrb_warn()を使っているので、abort()せずに例外になっ
てしまう可能性があります。出力されない警告よりも、最初から例外
にしてしまうほうがマシではないでしょうか。


Index: error.c
===================================================================
RCS file: /cvs/ruby/src/ruby/error.c,v
retrieving revision 1.77
diff -u -2 -p -r1.77 error.c
--- error.c	15 Aug 2003 03:01:52 -0000	1.77
+++ error.c	26 Aug 2003 08:59:32 -0000
@@ -111,9 +111,14 @@ warn_print(fmt, args)
     va_list args;
 {
-    char buf[BUFSIZ];
+    char buf[BUFSIZ+1];
+    int len;
 
+    if (ruby_safe_level >= 4) {
+	rb_exc_raise(rb_exc_new2(rb_eSecurityError, buf));
+    }
     err_snprintf(buf, BUFSIZ, fmt, args);
+    len = strlen(buf);
+    strcpy(&buf[len], "\n");
     rb_write_error(buf);
-    rb_write_error("\n");
 }
 
@@ -182,4 +187,5 @@ rb_bug(fmt, va_alist)
     va_list args;
 
+    if (ruby_safe_level >= 4) abort();
     snprintf(buf, BUFSIZ, "[BUG] %s", fmt);
     ruby_in_eval = 0;
@@ -188,7 +194,6 @@ rb_bug(fmt, va_alist)
     warn_print(buf, args);
     va_end(args);
-    snprintf(buf, BUFSIZ, "ruby %s (%s) [%s]\n", RUBY_VERSION, RUBY_RELEASE_DATE, RUBY_PLATFORM);
+    snprintf(buf, BUFSIZ, "ruby %s (%s) [%s]\n\n", RUBY_VERSION, RUBY_RELEASE_DATE, RUBY_PLATFORM);
     rb_write_error(buf);
-    rb_write_error("\n");
     abort();
 }
@@ -759,5 +764,5 @@ rb_sys_fail(mesg)
     errno = 0;
     if (n == 0) {
-	rb_bug("rb_sys_fail() - errno == 0");
+	rb_bug("rb_sys_fail(%s) - errno == 0", mesg ? mesg : "");
     }
 


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

In This Thread