From 860bdc3b61dbcacecd4a2fb2c40cf222e91b8fd5 Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 19 Oct 2004 10:25:23 +0000 Subject: * io.c (read_all): block string buffer modification during rb_io_fread() by freezing it temporarily. [ruby-dev:24479] * dir.c (rb_push_glob): block call at once the end of method. [ruby-dev:24487] * ext/enumerator/enumerator.c (enum_each_slice): remove rb_gc_force_recycle() to prevent potential SEGV. [ruby-dev:24499] * ext/zlib/zlib.c (zstream_expand_buffer): hide internal string buffer by clearing klass. [ruby-dev:24510] * ext/socket/socket.c (sock_s_getservbyaname): protocol string might be altered. [ruby-dev:24503] * string.c (rb_str_upto): check if return value from succ is a string. [ruby-dev:24504] * io.c (rb_io_popen): get mode string via rb_io_flags_mode() to avoid mode string modification. [ruby-dev:24454] * io.c (rb_io_getline_fast): should take delim as unsigned char to distinguish EOF and '\377'. [ruby-dev:24460] * io.c (rb_io_getline): add check for RS modification. [ruby-dev:24461] * enum.c (enum_sort_by): use qsort() directly instead using rb_iterate(). [ruby-dev:24462] * enum.c (enum_each_with_index): remove rb_gc_force_recycle() to prevent access to recycled object (via continuation for example). [ruby-dev:24463] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@7071 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/bigdecimal/bigdecimal.c | 2 +- ext/dbm/dbm.c | 2 +- ext/enumerator/enumerator.c | 3 --- ext/socket/socket.c | 16 +++++++--------- ext/zlib/zlib.c | 3 ++- 5 files changed, 11 insertions(+), 15 deletions(-) (limited to 'ext') diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c index 402e13cc5c..4ccba8809a 100644 --- a/ext/bigdecimal/bigdecimal.c +++ b/ext/bigdecimal/bigdecimal.c @@ -579,7 +579,7 @@ BigDecimal_ge(VALUE self, VALUE r) } static VALUE -BigDecimal_neg(VALUE self, VALUE r) +BigDecimal_neg(VALUE self) { ENTER(5); Real *c, *a; diff --git a/ext/dbm/dbm.c b/ext/dbm/dbm.c index c76d667989..143b0a9143 100644 --- a/ext/dbm/dbm.c +++ b/ext/dbm/dbm.c @@ -768,7 +768,7 @@ Init_dbm() rb_define_method(rb_cDBM, "index", fdbm_index, 1); rb_define_method(rb_cDBM, "indexes", fdbm_indexes, -1); rb_define_method(rb_cDBM, "indices", fdbm_indexes, -1); - rb_define_method(rb_cDBM, "select", fdbm_select, -1); + rb_define_method(rb_cDBM, "select", fdbm_select, 0); rb_define_method(rb_cDBM, "values_at", fdbm_values_at, -1); rb_define_method(rb_cDBM, "length", fdbm_length, 0); rb_define_method(rb_cDBM, "size", fdbm_length, 0); diff --git a/ext/enumerator/enumerator.c b/ext/enumerator/enumerator.c index 8c3c566178..6e47330cef 100644 --- a/ext/enumerator/enumerator.c +++ b/ext/enumerator/enumerator.c @@ -70,7 +70,6 @@ enum_each_slice(obj, n) ary = memo->u1.value; if (RARRAY(ary)->len > 0) rb_yield(ary); - rb_gc_force_recycle((VALUE)memo); return Qnil; } @@ -114,7 +113,6 @@ enum_each_cons(obj, n) rb_iterate(rb_each, obj, each_cons_i, (VALUE)memo); - rb_gc_force_recycle((VALUE)memo); return Qnil; } @@ -163,7 +161,6 @@ enumerator_each(obj) rb_to_id(rb_ivar_get(obj, id_enum_method)), rb_ivar_get(obj, id_enum_args)); val = rb_iterate((VALUE (*)_((VALUE)))enumerator_iter, obj, rb_yield, 0); - rb_gc_force_recycle(obj); return val; } diff --git a/ext/socket/socket.c b/ext/socket/socket.c index 21f2bea5d3..f9a821b55d 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -2130,27 +2130,25 @@ sock_s_getservbyaname(argc, argv) int argc; VALUE *argv; { - VALUE service, protocol; - char *proto; + VALUE service, proto; struct servent *sp; int port; - rb_scan_args(argc, argv, "11", &service, &protocol); - if (NIL_P(protocol)) proto = "tcp"; - else proto = StringValuePtr(protocol); + rb_scan_args(argc, argv, "11", &service, &proto); + if (NIL_P(proto)) proto = rb_str_new2("tcp"); + else StringValue(proto); - StringValue(service); - sp = getservbyname((char*)RSTRING(service)->ptr, proto); + sp = getservbyname((char*)RSTRING(service)->ptr, RSTRING(proto)->ptr); if (sp) { port = ntohs(sp->s_port); } else { - char *s = RSTRING(service)->ptr; + char *s = StringValuePtr(service); char *end; port = strtoul(s, &end, 0); if (*end != '\0') { - rb_raise(rb_eSocket, "no such service %s/%s", s, proto); + rb_raise(rb_eSocket, "no such service %s/%s", s, RSTRING(proto)->ptr); } } return INT2FIX(port); diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index ad7e91e930..412c98244a 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -437,6 +437,7 @@ zstream_expand_buffer(z) z->buf_filled = 0; z->stream.next_out = RSTRING(z->buf)->ptr; z->stream.avail_out = ZSTREAM_INITIAL_BUFSIZE; + RBASIC(z->buf)->klass = 0; return; } @@ -3276,7 +3277,7 @@ void Init_zlib() cZStream = rb_define_class_under(mZlib, "ZStream", rb_cObject); rb_undef_alloc_func(cZStream); rb_define_method(cZStream, "avail_out", rb_zstream_avail_out, 0); - rb_define_method(cZStream, "avail_out=", rb_zstream_set_avail_out, 0); + rb_define_method(cZStream, "avail_out=", rb_zstream_set_avail_out, 1); rb_define_method(cZStream, "avail_in", rb_zstream_avail_in, 0); rb_define_method(cZStream, "total_in", rb_zstream_total_in, 0); rb_define_method(cZStream, "total_out", rb_zstream_total_out, 0); -- cgit v1.2.3