From ffe229399843b3ddb86511c0627e208e989efc49 Mon Sep 17 00:00:00 2001 From: matz Date: Sat, 17 Sep 2005 14:40:06 +0000 Subject: * test/socket/test_tcp.rb (TestTCPSocket::test_recvfrom): typo fixed. [ruby-dev:27123] * string.c (rb_str_substr): should propagate taintness even for empty strings. [ruby-dev:27121] * string.c (rb_str_aref): should infect result if range argument is tainted. [ruby-dev:27121] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9199 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 13 +++++++++++++ file.c | 1 + io.c | 2 +- string.c | 13 +++++++++---- test/socket/test_tcp.rb | 4 ++-- 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 73cd8bb108..797a1ee5f6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Sep 17 23:20:27 2005 Yukihiro Matsumoto + + * test/socket/test_tcp.rb (TestTCPSocket::test_recvfrom): typo + fixed. [ruby-dev:27123] + Sat Sep 17 20:58:56 2005 Hirokazu Yamamoto * win32/win32.c (rb_w32_select): fixed deadlock bug. @@ -58,6 +63,14 @@ Sat Sep 17 10:42:13 2005 Hidetoshi NAGAI safe-level (Of course, the given script should be evaluated on slave's safe-level). +Sat Sep 17 09:45:26 2005 Yukihiro Matsumoto + + * string.c (rb_str_substr): should propagate taintness even for + empty strings. [ruby-dev:27121] + + * string.c (rb_str_aref): should infect result if range argument + is tainted. [ruby-dev:27121] + Sat Sep 17 08:35:39 2005 Kouhei Sutou * lib/rss/maker/base.rb (RSS::Maker::ItemsBase#normalize): fixed diff --git a/file.c b/file.c index 60c02bf7f1..937b17f331 100644 --- a/file.c +++ b/file.c @@ -2828,6 +2828,7 @@ rb_file_s_truncate(VALUE klass, VALUE path, VALUE len) #endif return INT2FIX(0); } + int recur; /* * call-seq: diff --git a/io.c b/io.c index ca8f934781..51c2ffcadc 100644 --- a/io.c +++ b/io.c @@ -35,7 +35,7 @@ # define NO_LONG_FNAME #endif -#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(sun) || defined(_nec_ews) +#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(sun) || defined(_nec_ews) # define USE_SETVBUF #endif diff --git a/string.c b/string.c index 1b6c7e4a96..bce4ea78c7 100644 --- a/string.c +++ b/string.c @@ -541,9 +541,10 @@ rb_str_substr(VALUE str, long beg, long len) if (len < 0) { len = 0; } - if (len == 0) return rb_str_new5(str,0,0); - - if (len > sizeof(struct RString)/2 && + if (len == 0) { + str2 = rb_str_new5(str,0,0); + } + else if (len > sizeof(struct RString)/2 && beg + len == RSTRING(str)->len && !FL_TEST(str, STR_ASSOC)) { str2 = rb_str_new3(rb_str_new4(str)); RSTRING(str2)->ptr += RSTRING(str2)->len - len; @@ -1433,13 +1434,17 @@ rb_str_aref(VALUE str, VALUE indx) /* check if indx is Range */ { long beg, len; + VALUE tmp; + switch (rb_range_beg_len(indx, &beg, &len, RSTRING(str)->len, 0)) { case Qfalse: break; case Qnil: return Qnil; default: - return rb_str_substr(str, beg, len); + tmp = rb_str_substr(str, beg, len); + OBJ_INFECT(tmp, indx); + return tmp; } } idx = NUM2LONG(indx); diff --git a/test/socket/test_tcp.rb b/test/socket/test_tcp.rb index 9e6623bdfc..362f9a7157 100644 --- a/test/socket/test_tcp.rb +++ b/test/socket/test_tcp.rb @@ -15,12 +15,12 @@ class TestTCPSocket < Test::Unit::TestCase ObjectSpace.each_object(String) {|s| s.replace "a" if s.length == 0x10000 and !s.frozen? } - c.print("x"*0x10000) + c.print("x"*0x1000) } addr = svr.addr sock = TCPSocket.open(addr[2], addr[1]) assert_raise(RuntimeError, SocketError) { - p sock.recvfrom(0x10000) + sock.recvfrom(0x10000) } ensure th.join -- cgit v1.2.3