[#21296] test and sample directory — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
5 messages
2003/09/01
[#21325] illegal member in %w array — kkosako@...
%w配列で、継続行の先頭が空白のときに
5 messages
2003/09/04
[#21337] Re: illegal member in %w array — kkosako@...
> From: matz@ruby-lang.org [mailto:matz@ruby-lang.org]
12 messages
2003/09/04
[#21339] Re: illegal member in %w array
— matz@... (Yukihiro Matsumoto)
2003/09/04
まつもと ゆきひろです
[#21338] $SAFE=4 での autoload — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
21 messages
2003/09/04
[#21346] Re: $SAFE=4 での autoload
— nobu.nakada@...
2003/09/04
なかだです。
[#21359] Re: $SAFE=4 での autoload
— Hidetoshi NAGAI <nagai@...>
2003/09/05
永井@知能.九工大です.
[#21361] Re: $SAFE=4 での autoload
— matz@... (Yukihiro Matsumoto)
2003/09/06
まつもと ゆきひろです
[#21363] Re: $SAFE=4 でのautoload
— nobu.nakada@...
2003/09/08
なかだです。
[#21364] Re: $SAFE=4 でのautoload
— matz@... (Yukihiro Matsumoto)
2003/09/08
まつもと ゆきひろです
[#21369] ext/openssl on mswin32 — Tietew <tietew-ml-ruby-dev@...>
Tietew です。
4 messages
2003/09/10
[#21384] LocalJumpError -> ThreadError — Masatoshi Seki <m_seki@...>
12 messages
2003/09/16
[#21385] Re: LocalJumpError -> ThreadError
— matz@... (Yukihiro Matsumoto)
2003/09/16
まつもと ゆきひろです
[#21386] Re: LocalJumpError -> ThreadError
— Masatoshi Seki <m_seki@...>
2003/09/16
咳といいます。
[#21388] Re: LocalJumpError -> ThreadError
— matz@... (Yukihiro Matsumoto)
2003/09/17
まつもと ゆきひろです
[#21389] Re: LocalJumpError -> ThreadError
— m_seki@...
2003/09/17
[#21403] Building 1.8.0 on Solaris with Sun CC — Masahiro TANAKA <masa@...>
9 messages
2003/09/22
[#21405] Re: Building 1.8.0 on Solaris with Sun CC
— 桑村慎哉 <kuwa@...>
2003/09/25
桑村です。
[#21414] deferred finalizers — nobu.nakada@...
なかだです。
5 messages
2003/09/26
[#21415] 定数のスコープ — akira yamada <akira@...>
8 messages
2003/09/26
[#21416] warnの戻り値 — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
8 messages
2003/09/26
[#21419] Makefile.inのlex.c — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
15 messages
2003/09/28
[#21422] Re: Makefile.inのlex.c
— matz@... (Yukihiro Matsumoto)
2003/09/28
まつもと ゆきひろです
[#21434] break from block yielded in until — Minero Aoki <aamine@...>
青木です。
13 messages
2003/09/29
[#21439] Re: break from block yielded in until
— Tietew <tietew-ml-ruby-dev@...>
2003/09/30
[#21442] Re: break from block yielded in until
— matz@... (Yukihiro Matsumoto)
2003/09/30
まつもと ゆきひろです
[ruby-dev:21346] Re: $SAFE=4 での autoload
From:
nobu.nakada@...
Date:
2003-09-04 14:34:31 UTC
List:
ruby-dev #21346
なかだです。
At Thu, 4 Sep 2003 17:23:32 +0900,
Hidetoshi NAGAI wrote:
> 登録済ということは,より低いセキュリティレベルで autoload メソッドの
> 呼び出しが行われたはずですから,その呼び出し時点で問題がなかったのなら
> ライブラリの require を行っても問題がなさそうに感じます.
そうすると、requireはautoloadを呼び出したときの$SAFEで実行すべ
きでしょうか。もしそうだとすれば、今はすでにautoloadされている
定数をさらにautoloadしようとしても何も変わりませんが、違う$SAFE
で呼ばれたときにはどっちを優先すべきなんでしょう。
> ついでに,patch がなくて申し訳ないのですが,
> $SAFE=4 で autoload に失敗したときの例外メッセージが
> ---------------------------------------------------
> Insecure operation `(null)' at level 4 (SecurityError)
> ---------------------------------------------------
> というようになってしまうのは修正すべきかと思います.
そういえば、rb_provided()で一度ロードされるファイルを探しに行く
ようになったのは、なんででしたっけ。
Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.530
diff -u -2 -p -r1.530 eval.c
--- eval.c 2 Sep 2003 00:51:39 -0000 1.530
+++ eval.c 4 Sep 2003 11:45:45 -0000
@@ -5839,18 +5839,38 @@ rb_feature_p(feature, wait)
{
VALUE v;
- char *f;
+ char *f, *ext = strrchr(feature, '.');
long i, len = strlen(feature);
+ int rb = 1, so = 1;
+ if (ext) {
+ if (strcmp(ext, ".rb") == 0) {
+ so = 0;
+ len = ext - feature;
+ }
+ else if (strcmp(ext, ".so") == 0 || strcmp(ext, ".o") == 0 ||
+#ifdef DLEXT2
+ strcmp(ext, DLEXT2) == 0 ||
+#endif
+ strcmp(ext, DLEXT) == 0) {
+ rb = 0;
+ len = ext - feature;
+ }
+ }
for (i = 0; i < RARRAY(rb_features)->len; ++i) {
v = RARRAY(rb_features)->ptr[i];
f = StringValuePtr(v);
- if (strcmp(f, feature) == 0) {
- goto load_wait;
- }
- if (strncmp(f, feature, len) == 0) {
- if (strcmp(f+len, ".so") == 0) {
+ if (strncmp(f, feature, len) != 0) continue;
+ ext = f + len;
+ if (so) {
+ if (strcmp(ext, ".so") == 0 || strcmp(ext, ".o") == 0 ||
+#ifdef DLEXT2
+ strcmp(ext, DLEXT2) == 0 ||
+#endif
+ strcmp(ext, DLEXT) == 0) {
return Qtrue;
}
- if (strcmp(f+len, ".rb") == 0) {
+ }
+ if (rb) {
+ if (strcmp(ext, ".rb") == 0) {
if (wait) goto load_wait;
return Qtrue;
@@ -5890,12 +5910,5 @@ rb_provided(feature)
const char *feature;
{
- VALUE f = rb_str_new2(feature);
-
- if (strrchr(feature, '.') == 0) {
- if (rb_find_file_ext(&f, loadable_ext) == 0) {
- return rb_feature_p(feature, Qfalse);
- }
- }
- return rb_feature_p(RSTRING(f)->ptr, Qfalse);
+ return rb_feature_p(feature, Qfalse);
}
@@ -6068,4 +6081,16 @@ rb_require(fname)
}
+VALUE
+rb_require_autoload(file, klass, id)
+ VALUE file, klass;
+ ID id;
+{
+ PUSH_FRAME();
+ ruby_frame->last_class = klass;
+ ruby_frame->last_func = id;
+ rb_f_require(Qnil, file);
+ POP_FRAME();
+}
+
static void
secure_visibility(self)
Index: variable.c
===================================================================
RCS file: /cvs/ruby/src/ruby/variable.c,v
retrieving revision 1.102
diff -u -2 -p -r1.102 variable.c
--- variable.c 30 Aug 2003 00:03:57 -0000 1.102
+++ variable.c 4 Sep 2003 09:08:13 -0000
@@ -1212,5 +1212,5 @@ rb_autoload_load(klass, id)
}
FL_UNSET(file, FL_TAINT);
- rb_f_require(Qnil, file);
+ rb_require_autoload(file, klass, id);
}
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦