diff options
-rw-r--r-- | ChangeLog | 27 | ||||
-rw-r--r-- | eval.c | 39 | ||||
-rw-r--r-- | ext/nkf/nkf.c | 2 | ||||
-rw-r--r-- | file.c | 6 | ||||
-rw-r--r-- | regex.c | 2 | ||||
-rw-r--r-- | ruby.c | 2 | ||||
-rw-r--r-- | string.c | 1 | ||||
-rw-r--r-- | version.h | 4 |
8 files changed, 62 insertions, 21 deletions
@@ -19,6 +19,33 @@ Fri Jul 6 00:49:05 2001 Akinori MUSHA <knu@iDaemons.org> * ext/readline/README, ext/readline/README.jp: merge from 1.7: add an English version of the document. +Thu Jul 5 22:53:27 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp> + + * eval.c (rb_f_require): move rb_file_s_expand_path from + rb_find_file_noext(). + + * file.c (rb_find_file_noext): move rb_file_s_expand_path to + rb_f_require(). + +Thu Jul 5 20:28:53 2001 Tietew <tietew@tietew.net> + + * string.c (rb_str_each_line): should propagate taint mark. + + * ext/nkf/nkf.c (rb_nkf_kconv): ditto. + +Thu Jul 5 13:44:03 2001 Yukihiro Matsumoto <matz@ruby-lang.org> + + * ruby.c (load_file): local variables 'c' remain uninitialized on + xflag. + +Thu Jul 5 10:00:59 2001 Yukihiro Matsumoto <matz@ruby-lang.org> + + * regex.c (re_match): prefetched escaped character too early. + +Wed Jul 4 08:58:30 2001 Yukihiro Matsumoto <matz@ruby-lang.org> + + * eval.c (rb_call0): add argument check for attr_readers. + Wed Jul 4 00:12:37 2001 Akinori MUSHA <knu@iDaemons.org> * lib/find.rb: merge from 1.7: rescue Errno::EACCES as well. @@ -1262,11 +1262,17 @@ rb_eval_string_wrap(str, state) PUSH_CLASS(); ruby_class = ruby_wrapper = rb_module_new(); ruby_top_self = rb_obj_clone(ruby_top_self); - rb_extend_object(ruby_top_self, ruby_class); + rb_extend_object(ruby_top_self, ruby_wrapper); + PUSH_FRAME(); + ruby_frame->last_func = 0; + ruby_frame->last_class = 0; + ruby_frame->self = self; + ruby_frame->cbase = (VALUE)rb_node_newnode(NODE_CREF,ruby_wrapper,0,0); val = rb_eval_string_protect(str, &status); ruby_top_self = self; + POP_FRAME(); POP_CLASS(); ruby_wrapper = wrapper; if (state) { @@ -1320,16 +1326,19 @@ rb_eval_cmd(cmd, arg) RARRAY(arg)->len, RARRAY(arg)->ptr); } - PUSH_CLASS(); - PUSH_TAG(PROT_NONE); saved_scope = ruby_scope; ruby_scope = top_scope; + PUSH_FRAME(); + ruby_frame->last_func = 0; + ruby_frame->last_class = 0; + ruby_frame->self = ruby_top_self; + ruby_frame->cbase = (VALUE)rb_node_newnode(NODE_CREF,ruby_wrapper,0,0); - ruby_class = ruby_wrapper ? ruby_wrapper : rb_cObject; if (OBJ_TAINTED(cmd)) { ruby_safe_level = 4; } + PUSH_TAG(PROT_NONE); if ((state = EXEC_TAG()) == 0) { val = eval(ruby_top_self, cmd, Qnil, 0, 0); } @@ -1339,7 +1348,7 @@ rb_eval_cmd(cmd, arg) ruby_scope = saved_scope; ruby_safe_level = safe; POP_TAG(); - POP_CLASS(); + POP_FRAME(); jump_tag_but_local_jump(state); return val; @@ -4331,11 +4340,14 @@ rb_call0(klass, recv, id, argc, argv, body, nosuper) } break; - /* for re-scoped/renamed method */ - case NODE_ZSUPER: /* for attr get/set */ - case NODE_ATTRSET: case NODE_IVAR: + if (argc != 0) { + rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)", argc); + } + case NODE_ATTRSET: + /* for re-scoped/renamed method */ + case NODE_ZSUPER: result = rb_eval(recv, body); break; @@ -4786,7 +4798,6 @@ eval(self, src, scope, file, line) file = ruby_sourcefile; line = ruby_sourceline; } - PUSH_CLASS(); if (!NIL_P(scope)) { if (!rb_obj_is_block(scope)) { rb_raise(rb_eTypeError, "wrong argument type %s (expected Proc/Binding)", @@ -4813,13 +4824,14 @@ eval(self, src, scope, file, line) self = data->self; ruby_frame->iter = data->iter; - ruby_class = ruby_cbase; } else { if (ruby_frame->prev) { ruby_frame->iter = ruby_frame->prev->iter; } } + PUSH_CLASS(); + ruby_class = ruby_cbase; ruby_in_eval++; if (TYPE(ruby_class) == T_ICLASS) { @@ -5381,7 +5393,12 @@ rb_f_require(obj, fname) } #endif } - buf = ALLOCA_N(char, strlen(RSTRING(fname)->ptr) + 5); + obj = fname; + if (RSTRING(fname)->ptr[0] == '~') { + obj = rb_file_s_expand_path(1, &fname); + StringValue(obj); + } + buf = ALLOCA_N(char, strlen(RSTRING(obj)->ptr) + 5); strcpy(buf, RSTRING(fname)->ptr); switch (rb_find_file_noext(buf)) { case 0: diff --git a/ext/nkf/nkf.c b/ext/nkf/nkf.c index b59688cb03..51a28f7c0b 100644 --- a/ext/nkf/nkf.c +++ b/ext/nkf/nkf.c @@ -80,6 +80,8 @@ rb_nkf_kconv(obj, opt, src) kanji_convert(NULL); RSTRING(dst)->ptr[output_ctr] = '\0'; RSTRING(dst)->len = output_ctr; + if(OBJ_TAINTED(src)) + OBJ_TAINT(dst); return dst; } @@ -2155,12 +2155,6 @@ rb_find_file_noext(file) 0 }; - if (file[0] == '~') { - fname = rb_str_new2(file); - fname = rb_file_s_expand_path(1, &fname); - file = STR2CSTR(fname); - } - if (is_absolute_path(file)) { for (i=0; ext[i]; i++) { strcpy(fend, ext[i]); @@ -4237,7 +4237,6 @@ re_match(bufp, string_arg, size, pos, regs) unsigned char c; PREFETCH; - c = *d++; if (*p == 0xff) { p++; if (!--mcnt @@ -4246,6 +4245,7 @@ re_match(bufp, string_arg, size, pos, regs) goto fail; continue; } + c = *d++; if (ismbchar(c)) { int n; @@ -768,7 +768,7 @@ load_file(fname, script) } if (script) { - VALUE c; + VALUE c = 1; /* something not nil */ VALUE line; char *p; @@ -2331,6 +2331,7 @@ rb_str_each_line(argc, argv, str) (rslen <= 1 || rb_memcmp(RSTRING(rs)->ptr, p-rslen, rslen) == 0)) { line = rb_str_new(s, p - s); + OBJ_INFECT(line, str); rb_yield(line); if (RSTRING(str)->ptr != ptr || RSTRING(str)->len != len) rb_raise(rb_eArgError, "string modified"); @@ -1,4 +1,4 @@ #define RUBY_VERSION "1.6.4" -#define RUBY_RELEASE_DATE "2001-07-02" +#define RUBY_RELEASE_DATE "2001-07-06" #define RUBY_VERSION_CODE 164 -#define RUBY_RELEASE_CODE 20010702 +#define RUBY_RELEASE_CODE 20010706 |