diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-06-11 06:58:39 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-06-11 06:58:39 +0000 |
commit | 82c4f0e5a85e5cf4366c110050fd4cbd9bec5011 (patch) | |
tree | ce7c0b7c1b9db53afe75d4a74014e86386d0a438 | |
parent | 2d3a6b9c22f903fa379842cb62086ff61a5e745b (diff) |
* eval.c (rb_eval): ruby_frame->last_func may be null, if it's
called outside of a method.
* parse.y (arg): use INT2NUM, not INT2FIX for tUMINUS.
* parse.y (arg): $1 may be null for tPOW.
* parse.y (stmt,arg): too much void value check.
* parse.y (arg): need to check void value on rules which does not
use node_assign().
* ext/socket/socket.c (ipaddr): need not to taint hostnames.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@2547 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 20 | ||||
-rw-r--r-- | eval.c | 9 | ||||
-rw-r--r-- | ext/socket/socket.c | 36 | ||||
-rw-r--r-- | parse.y | 11 |
4 files changed, 52 insertions, 24 deletions
@@ -8,6 +8,26 @@ Mon Jun 10 19:02:19 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net> * parse.y (yylex): `0_' should be an error. (ruby-bugs-ja:PR#249) +Mon Jun 10 01:53:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org> + + * eval.c (rb_eval): ruby_frame->last_func may be null, if it's + called outside of a method. + + * parse.y (arg): use INT2NUM, not INT2FIX for tUMINUS. + + * parse.y (arg): $1 may be null for tPOW. + +Sat Jun 8 00:48:38 2002 Yukihiro Matsumoto <matz@ruby-lang.org> + + * parse.y (stmt,arg): too much void value check. + + * parse.y (arg): need to check void value on rules which does not + use node_assign(). + +Thu Jun 6 17:42:39 2002 Yukihiro Matsumoto <matz@ruby-lang.org> + + * ext/socket/socket.c (ipaddr): need not to taint hostnames. + Wed Jun 5 18:53:06 2002 Yukihiro Matsumoto <matz@ruby-lang.org> * math.c (Init_Math): backport asin, acos, atan. @@ -2580,8 +2580,13 @@ rb_eval(self, n) TMP_PROTECT; if (ruby_frame->last_class == 0) { - rb_raise(rb_eNameError, "superclass method `%s' disabled", - rb_id2name(ruby_frame->last_func)); + if (ruby_frame->last_func) { + rb_raise(rb_eNameError, "superclass method `%s' disabled", + rb_id2name(ruby_frame->last_func)); + } + else { + rb_raise(rb_eRuntimeError, "super called outside of method"); + } } if (nd_type(node) == NODE_ZSUPER) { argc = ruby_frame->argc; diff --git a/ext/socket/socket.c b/ext/socket/socket.c index 248748d028..3d90ff4f6a 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -334,7 +334,7 @@ bsock_getsockopt(sock, lev, optname) if (getsockopt(fileno(fptr->f), level, option, buf, &len) < 0) rb_sys_fail(fptr->path); - return rb_tainted_str_new(buf, len); + return rb_str_new(buf, len); #else rb_notimplement(); #endif @@ -351,7 +351,7 @@ bsock_getsockname(sock) GetOpenFile(sock, fptr); if (getsockname(fileno(fptr->f), (struct sockaddr*)buf, &len) < 0) rb_sys_fail("getsockname(2)"); - return rb_tainted_str_new(buf, len); + return rb_str_new(buf, len); } static VALUE @@ -365,7 +365,7 @@ bsock_getpeername(sock) GetOpenFile(sock, fptr); if (getpeername(fileno(fptr->f), (struct sockaddr*)buf, &len) < 0) rb_sys_fail("getpeername(2)"); - return rb_tainted_str_new(buf, len); + return rb_str_new(buf, len); } static VALUE @@ -480,7 +480,7 @@ s_recvfrom(sock, argc, argv, from) return rb_assoc_new(str, unixaddr((struct sockaddr_un *)buf)); #endif case RECV_SOCKET: - return rb_assoc_new(str, rb_tainted_str_new(buf, alen)); + return rb_assoc_new(str, rb_str_new(buf, alen)); default: rb_bug("s_recvfrom called with bad value"); } @@ -530,7 +530,7 @@ mkipaddr(addr) char buf[1024]; mkipaddr0(addr, buf, sizeof(buf)); - return rb_tainted_str_new2(buf); + return rb_str_new2(buf); } static void @@ -664,14 +664,14 @@ ipaddr(sockaddr) if (error) { rb_raise(rb_eSocket, "getnameinfo: %s", gai_strerror(error)); } - addr1 = rb_tainted_str_new2(hbuf); + addr1 = rb_str_new2(hbuf); } error = getnameinfo(sockaddr, SA_LEN(sockaddr), hbuf, sizeof(hbuf), pbuf, sizeof(pbuf), NI_NUMERICHOST | NI_NUMERICSERV); if (error) { rb_raise(rb_eSocket, "getnameinfo: %s", gai_strerror(error)); } - addr2 = rb_tainted_str_new2(hbuf); + addr2 = rb_str_new2(hbuf); if (do_not_reverse_lookup) { addr1 = addr2; } @@ -1016,11 +1016,11 @@ tcp_s_gethostbyname(obj, host) #endif } ary = rb_ary_new(); - rb_ary_push(ary, rb_tainted_str_new2(h->h_name)); + rb_ary_push(ary, rb_str_new2(h->h_name)); names = rb_ary_new(); rb_ary_push(ary, names); for (pch = h->h_aliases; *pch; pch++) { - rb_ary_push(names, rb_tainted_str_new2(*pch)); + rb_ary_push(names, rb_str_new2(*pch)); } rb_ary_push(ary, INT2NUM(h->h_addrtype)); #ifdef h_addr @@ -1398,7 +1398,7 @@ unix_path(sock) rb_sys_fail(0); fptr->path = strdup(addr.sun_path); } - return rb_tainted_str_new2(fptr->path); + return rb_str_new2(fptr->path); } static VALUE @@ -1436,7 +1436,7 @@ unixaddr(sockaddr) struct sockaddr_un *sockaddr; { return rb_assoc_new(rb_str_new2("AF_UNIX"), - rb_tainted_str_new2(sockaddr->sun_path)); + rb_str_new2(sockaddr->sun_path)); } static VALUE @@ -1691,7 +1691,7 @@ sock_gethostname(obj) rb_sys_fail("gethostname"); buf[sizeof buf - 1] = '\0'; - return rb_tainted_str_new2(buf); + return rb_str_new2(buf); } #else #ifdef HAVE_UNAME @@ -1706,7 +1706,7 @@ sock_gethostname(obj) rb_secure(3); uname(&un); - return rb_tainted_str_new2(un.nodename); + return rb_str_new2(un.nodename); } #else static VALUE @@ -1734,19 +1734,19 @@ mkhostent(h) #endif } ary = rb_ary_new(); - rb_ary_push(ary, rb_tainted_str_new2(h->h_name)); + rb_ary_push(ary, rb_str_new2(h->h_name)); names = rb_ary_new(); rb_ary_push(ary, names); for (pch = h->h_aliases; *pch; pch++) { - rb_ary_push(names, rb_tainted_str_new2(*pch)); + rb_ary_push(names, rb_str_new2(*pch)); } rb_ary_push(ary, INT2NUM(h->h_addrtype)); #ifdef h_addr for (pch = h->h_addr_list; *pch; pch++) { - rb_ary_push(ary, rb_tainted_str_new(*pch, h->h_length)); + rb_ary_push(ary, rb_str_new(*pch, h->h_length)); } #else - rb_ary_push(ary, rb_tainted_str_new(h->h_addr, h->h_length)); + rb_ary_push(ary, rb_str_new(h->h_addr, h->h_length)); #endif return ary; @@ -2072,7 +2072,7 @@ sock_s_getnameinfo(argc, argv) } freeaddrinfo(res); } - return rb_assoc_new(rb_tainted_str_new2(hbuf), rb_tainted_str_new2(pbuf)); + return rb_assoc_new(rb_str_new2(hbuf), rb_str_new2(pbuf)); error_exit_addr: if (res) freeaddrinfo(res); @@ -402,7 +402,6 @@ stmt : kALIAS fitem {lex_state = EXPR_FNAME;} fitem } | lhs '=' command_call { - value_expr($3); $$ = node_assign($1, $3); } | mlhs '=' command_call @@ -685,11 +684,11 @@ reswords : k__LINE__ | k__FILE__ | klBEGIN | klEND arg : lhs '=' arg { - value_expr($3); $$ = node_assign($1, $3); } | variable tOP_ASGN {$$ = assignable($1, 0);} arg { + value_expr($4); if ($<node>3) { if ($2 == tOROP) { $<node>3->nd_value = $4; @@ -716,6 +715,7 @@ arg : lhs '=' arg { NODE *tmp, *args = NEW_LIST($6); + value_expr($5); $3 = list_append($3, NEW_NIL()); list_concat(args, $3); if ($5 == tOROP) { @@ -729,6 +729,7 @@ arg : lhs '=' arg } | primary '.' tIDENTIFIER tOP_ASGN arg { + value_expr($5); if ($4 == tOROP) { $4 = 0; } @@ -740,6 +741,7 @@ arg : lhs '=' arg } | primary '.' tCONSTANT tOP_ASGN arg { + value_expr($5); if ($4 == tOROP) { $4 = 0; } @@ -751,6 +753,7 @@ arg : lhs '=' arg } | primary tCOLON2 tIDENTIFIER tOP_ASGN arg { + value_expr($5); if ($4 == tOROP) { $4 = 0; } @@ -797,7 +800,7 @@ arg : lhs '=' arg { int need_negate = Qfalse; - if (nd_type($1) == NODE_LIT) { + if ($1 && nd_type($1) == NODE_LIT) { switch (TYPE($1->nd_lit)) { case T_FIXNUM: @@ -830,7 +833,7 @@ arg : lhs '=' arg if ($2 && nd_type($2) == NODE_LIT && FIXNUM_P($2->nd_lit)) { long i = FIX2LONG($2->nd_lit); - $2->nd_lit = INT2FIX(-i); + $2->nd_lit = INT2NUM(-i); $$ = $2; } else { |