diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-09-12 03:16:31 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-09-12 03:16:31 +0000 |
commit | fc8e62d0df805059eb73cf4c6dd54db0210db084 (patch) | |
tree | 05cfac969865445eb7ddd74700ef60350d9a9e89 | |
parent | 20e165a04090a024db4d295d00af6ed1ac67578d (diff) |
* bignum.c (rb_big_and): convert argument using 'to_int'.
* bignum.c (rb_big_or): ditto.
* bignum.c (rb_big_xor): ditto.
* 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.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4549 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 16 | ||||
-rw-r--r-- | bignum.c | 13 | ||||
-rw-r--r-- | eval.c | 19 | ||||
-rw-r--r-- | ext/socket/extconf.rb | 19 | ||||
-rw-r--r-- | lib/mkmf.rb | 3 | ||||
-rw-r--r-- | lib/rexml/parsers/baseparser.rb | 6 | ||||
-rw-r--r-- | variable.c | 3 |
7 files changed, 55 insertions, 24 deletions
@@ -1,8 +1,24 @@ +Fri Sep 12 12:09:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org> + + * 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 <dblack@superlink.net> * lib/scanf.rb: Took out useless @matched_item variable; some small refactoring. +Thu Sep 11 08:43:44 2003 Yukihiro Matsumoto <matz@ruby-lang.org> + + * 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 <gotoyuzo@notwork.org> * ext/openssl/ossl.h: define OSSL_NO_CONF_API for win32 platform. @@ -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); @@ -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(<<EOF) -#include <sys/types.h> -#include <netdb.h> -#include <string.h> -#include <sys/socket.h> -#include <netinet/in.h> +#ifndef _WIN32 +# include <sys/types.h> +# include <netdb.h> +# include <string.h> +# include <sys/socket.h> +# include <netinet/in.h> +#else +# include <windows.h> +# ifdef _WIN32_WCE +# include <winsock.h> +# else +# include <winsock.h> +# 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"); |