diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | array.c | 4 |
2 files changed, 8 insertions, 4 deletions
@@ -1,7 +1,11 @@ Wed Sep 5 22:02:27 2007 Yukihiro Matsumoto <matz@ruby-lang.org> - * array.c (rb_ary_fill): need integer overflow check. - [ruby-dev:31738] + * array.c (rb_ary_subseq): need integer overflow check. + [ruby-dev:31736] + + * array.c (rb_ary_splice): ditto. [ruby-dev:31737] + + * array.c (rb_ary_fill): ditto. [ruby-dev:31738] * string.c (rb_str_splice): integer overflow for length. [ruby-dev:31739] @@ -606,7 +606,7 @@ rb_ary_subseq(ary, beg, len) if (beg > RARRAY(ary)->len) return Qnil; if (beg < 0 || len < 0) return Qnil; - if (beg + len > RARRAY(ary)->len) { + if (RARRAY(ary)->len < len || RARRAY(ary)->len < beg + len) { len = RARRAY(ary)->len - beg; if (len < 0) len = 0; @@ -959,7 +959,7 @@ rb_ary_splice(ary, beg, len, rpl) rb_raise(rb_eIndexError, "index %ld out of array", beg); } } - if (beg + len > RARRAY(ary)->len) { + if (RARRAY(ary)->len < len || RARRAY(ary)->len < beg + len) { len = RARRAY(ary)->len - beg; } |