diff --git a/ChangeLog b/ChangeLog index 83363f1e23..e320cb8c20 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,24 @@ +Fri Sep 12 12:09:54 2003 Yukihiro Matsumoto + + * bignum.c (rb_big_and): convert argument using 'to_int'. + + * bignum.c (rb_big_or): ditto. + + * bignum.c (rb_big_xor): ditto. + Fri Sep 11 22:06:14 2003 David Black * lib/scanf.rb: Took out useless @matched_item variable; some small refactoring. +Thu Sep 11 08:43:44 2003 Yukihiro Matsumoto + + * eval.c (rb_f_require): allow "require" on $SAFE>0, if feature + name is not tainted. + + * lib/rexml/parsers/baseparser.rb (REXML::Parsers::BaseParser::stream): + Supports StringIO. + Wed Sep 10 22:47:30 2003 GOTOU Yuuzou * ext/openssl/ossl.h: define OSSL_NO_CONF_API for win32 platform. diff --git a/bignum.c b/bignum.c index 550dcfcafe..6882580eae 100644 --- a/bignum.c +++ b/bignum.c @@ -1451,13 +1451,10 @@ rb_big_and(x, y) long i, l1, l2; char sign; + y = rb_to_int(y); if (FIXNUM_P(y)) { y = rb_int2big(FIX2LONG(y)); } - else { - Check_Type(y, T_BIGNUM); - } - if (!RBIGNUM(y)->sign) { y = rb_big_clone(y); get2comp(y, Qtrue); @@ -1502,12 +1499,10 @@ rb_big_or(x, y) long i, l1, l2; char sign; + y = rb_to_int(y); if (FIXNUM_P(y)) { y = rb_int2big(FIX2LONG(y)); } - else { - Check_Type(y, T_BIGNUM); - } if (!RBIGNUM(y)->sign) { y = rb_big_clone(y); @@ -1554,12 +1549,10 @@ rb_big_xor(x, y) long i, l1, l2; char sign; + y = rb_to_int(y); if (FIXNUM_P(y)) { y = rb_int2big(FIX2LONG(y)); } - else { - Check_Type(y, T_BIGNUM); - } if (!RBIGNUM(y)->sign) { y = rb_big_clone(y); diff --git a/eval.c b/eval.c index 435de81487..513af340c8 100644 --- a/eval.c +++ b/eval.c @@ -133,8 +133,13 @@ rb_secure(level) int level; { if (level <= ruby_safe_level) { - rb_raise(rb_eSecurityError, "Insecure operation `%s' at level %d", - rb_id2name(ruby_frame->last_func), ruby_safe_level); + if (ruby_frame->last_func) { + rb_raise(rb_eSecurityError, "Insecure operation `%s' at level %d", + rb_id2name(ruby_frame->last_func), ruby_safe_level); + } + else { + rb_raise(rb_eSecurityError, "Insecure operation at level %d", ruby_safe_level); + } } } @@ -5923,7 +5928,10 @@ rb_f_require(obj, fname) VALUE feature, tmp; char *ext; /* OK */ - SafeStringValue(fname); + if (OBJ_TAINTED(fname)) { + rb_check_safe_obj(fname); + } + StringValue(fname); ext = strrchr(RSTRING(fname)->ptr, '.'); if (ext && strchr(ext, '/')) ext = 0; if (ext) { @@ -5993,15 +6001,17 @@ load_dyna(feature, fname) VALUE feature, fname; { int state; + volatile int safe = ruby_safe_level; if (rb_feature_p(RSTRING(feature)->ptr, Qfalse)) return Qfalse; rb_provide_feature(feature); { - int volatile old_vmode = scope_vmode; + volatile int old_vmode = scope_vmode; NODE *const volatile old_node = ruby_current_node; const volatile ID old_func = ruby_frame->last_func; + ruby_safe_level = 0; ruby_current_node = 0; ruby_sourcefile = rb_source_filename(RSTRING(fname)->ptr); ruby_sourceline = 0; @@ -6020,6 +6030,7 @@ load_dyna(feature, fname) ruby_frame->last_func = old_func; SCOPE_SET(old_vmode); } + ruby_safe_level = safe; if (state) JUMP_TAG(state); ruby_errinfo = Qnil; diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb index 357025cbbb..e888b2a197 100644 --- a/ext/socket/extconf.rb +++ b/ext/socket/extconf.rb @@ -323,11 +323,20 @@ if $getaddr_info_ok and have_func("getaddrinfo") and have_func("getnameinfo") have_getaddrinfo = true else if try_link(< -#include -#include -#include -#include +#ifndef _WIN32 +# include +# include +# include +# include +# include +#else +# include +# ifdef _WIN32_WCE +# include +# else +# include +# endif +#endif int main() { diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 2cf79c8d40..8a3c7c9147 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb @@ -633,7 +633,8 @@ def dir_config(target, idefault=nil, ldefault=nil) idir = with_config(target + "-include", idefault) ldir = with_config(target + "-lib", ldefault) - idirs = idir ? idir.split(File::PATH_SEPARATOR) : [] +# idirs = idir ? idir.split(File::PATH_SEPARATOR) : [] + idirs = idir.split(File::PATH_SEPARATOR) rescue [] if defaults idirs.concat(defaults.collect {|dir| dir + "/include"}) idir = ([idir] + idirs).compact.join(File::PATH_SEPARATOR) diff --git a/lib/rexml/parsers/baseparser.rb b/lib/rexml/parsers/baseparser.rb index cfcea16f1d..d6e04c7817 100644 --- a/lib/rexml/parsers/baseparser.rb +++ b/lib/rexml/parsers/baseparser.rb @@ -106,9 +106,11 @@ module REXML @source = IOSource.new(source) elsif source.kind_of? Source @source = source + elsif defined? StringIO and source.kind_of? StringIO + @source = IOSource.new(source) else - raise "#{source.type} is not a valid input stream. It must be \n"+ - "either a String, IO, or Source." + raise "#{source.class} is not a valid input stream. It must be \n"+ + "either a String, IO, StringIO or Source." end @closed = nil @document_status = nil diff --git a/variable.c b/variable.c index 444e2eed62..f2e9c7c98e 100644 --- a/variable.c +++ b/variable.c @@ -1150,8 +1150,7 @@ rb_autoload(mod, id, file) struct st_table *tbl; if (!rb_is_const_id(id)) { - rb_raise(rb_eNameError, "autoload must be constant name", - rb_id2name(id)); + rb_raise(rb_eNameError, "autoload must be constant name", rb_id2name(id)); } if (!file || !*file) { rb_raise(rb_eArgError, "empty file name");