From 1057902ac7bc51a9d6c852e6cd778498acbed869 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/trunk@7071 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/socket/socket.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'ext/socket/socket.c') diff --git a/ext/socket/socket.c b/ext/socket/socket.c index 979eaa0af3..044d411b29 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -2217,27 +2217,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); -- cgit v1.2.3