summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-07-06 06:37:01 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-07-06 06:37:01 +0000
commit95ad43eeb5d967d61be874e5700ee6d8667bf660 (patch)
treebe539344ea68014b792caf7b9a44d6934fe1bbb7
parent88f586b8ac7ccc3154753529b99048bf1abb2d9e (diff)
* 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(). * string.c (rb_str_each_line): should propagate taint mark. * ext/nkf/nkf.c (rb_nkf_kconv): ditto. * ruby.c (load_file): local variables 'c' remain uninitialized on xflag. * regex.c (re_match): prefetched escaped character too early. * eval.c (rb_call0): add argument check for attr_readers. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@1574 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog27
-rw-r--r--eval.c39
-rw-r--r--ext/nkf/nkf.c2
-rw-r--r--file.c6
-rw-r--r--regex.c2
-rw-r--r--ruby.c2
-rw-r--r--string.c1
-rw-r--r--version.h4
8 files changed, 62 insertions, 21 deletions
diff --git a/ChangeLog b/ChangeLog
index ad7f9fc3e8..473cdb166f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/eval.c b/eval.c
index b43c2c73b1..70026a5876 100644
--- a/eval.c
+++ b/eval.c
@@ -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;
}
diff --git a/file.c b/file.c
index b4e8ff138c..679808ec98 100644
--- a/file.c
+++ b/file.c
@@ -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]);
diff --git a/regex.c b/regex.c
index fc4b7253e6..e9689cb4b8 100644
--- a/regex.c
+++ b/regex.c
@@ -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;
diff --git a/ruby.c b/ruby.c
index eac3d8701c..7dcfed68d1 100644
--- a/ruby.c
+++ b/ruby.c
@@ -768,7 +768,7 @@ load_file(fname, script)
}
if (script) {
- VALUE c;
+ VALUE c = 1; /* something not nil */
VALUE line;
char *p;
diff --git a/string.c b/string.c
index da5abde432..cff38d8917 100644
--- a/string.c
+++ b/string.c
@@ -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");
diff --git a/version.h b/version.h
index 27bd00bdff..0e47ac29b0 100644
--- a/version.h
+++ b/version.h
@@ -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