From e3a8c626308cb8546baaf75e6133df304142f0c8 Mon Sep 17 00:00:00 2001 From: matz Date: Wed, 24 Apr 2002 04:54:16 +0000 Subject: * io.c (rb_io_mode_flags): both 'r+b' and 'rb+' should be allowed. * io.c (rb_io_mode_modenum): ditto. * gc.c (rb_memerror): rename from mem_error, and exported. * gc.c (Init_GC): pre-allocate NoMemoryError instance. * object.c (convert_type): error message changed from "failed to convert" to "cannot convert", since it does not try to convert if an object does not respond to the converting method. * eval.c (block_pass): convert Method to Proc using rb_check_convert_type(). * object.c (rb_check_convert_type): always convert T_DATA * eval.c (rb_thread_cleanup): should not terminate main_thread by Fatal error. * regex.c (is_in_list): need to not exclude NUL and NEWLINE. * re.c (rb_reg_expr_str): wrong backslash escapement. * re.c (rb_reg_expr_str): do not escape embedded space characters. * marshal.c (w_object): T_DATA process patch from Joel VanderWerf . This is temporary hack; it remains undocumented, and it will be removed when marshaling is re-designed. * marshal.c (r_object): ditto. * numeric.c (num_step): Integer#step is moved to Numeric#step; Fixnum#step is merged into this method. * numeric.c (int_dotimes): Fixnum#times is merged. * numeric.c (int_upto): Fixnum#upto is merged. * numeric.c (int_downto): Fixnum#downto is merged. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2401 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- string.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) (limited to 'string.c') diff --git a/string.c b/string.c index 4eb2bb9966..399f04c859 100644 --- a/string.c +++ b/string.c @@ -293,7 +293,6 @@ str_copy(str, clone) int clone; { VALUE str2; - VALUE klass; int flags; StringValue(str); @@ -528,16 +527,18 @@ rb_str_resize(str, len) VALUE str; long len; { + if (len < 0) { + rb_raise(rb_eArgError, "negative string size (or size too big)"); + } + if (len != RSTRING(str)->len) { rb_str_modify(str); - if (len >= 0) { - if (RSTRING(str)->len < len || RSTRING(str)->len - len > 1024) { - RESIZE_CAPA(str, len); - } - RSTRING(str)->len = len; - RSTRING(str)->ptr[len] = '\0'; /* sentinel */ + if (RSTRING(str)->len < len || RSTRING(str)->len - len > 1024) { + RESIZE_CAPA(str, len); } + RSTRING(str)->len = len; + RSTRING(str)->ptr[len] = '\0'; /* sentinel */ } return str; } @@ -548,7 +549,7 @@ rb_str_buf_cat(str, ptr, len) const char *ptr; long len; { - long i, capa, total; + long capa, total; if (FL_TEST(str, ELTS_SHARED)) { rb_str_modify(str); @@ -582,8 +583,6 @@ rb_str_cat(str, ptr, len) const char *ptr; long len; { - long i, capa; - rb_str_modify(str); if (len > 0) { if (!FL_TEST(str, ELTS_SHARED) && !FL_TEST(str, STR_ASSOC)) { @@ -615,7 +614,7 @@ VALUE rb_str_buf_append(str, str2) VALUE str, str2; { - long i, capa, len; + long capa, len; if (FL_TEST(str, ELTS_SHARED)) { rb_str_modify(str); @@ -641,7 +640,7 @@ VALUE rb_str_append(str, str2) VALUE str, str2; { - long i, capa, len; + long len; StringValue(str2); rb_str_modify(str); -- cgit v1.2.3