From 5e6634ce67281e7142e61fa5ba18265ff894c9e5 Mon Sep 17 00:00:00 2001 From: matz Date: Thu, 1 Aug 2002 09:42:38 +0000 Subject: * parse.y (tokadd_string): ignore backslashed spaces in %w. * enum.c (enum_find): do not use rb_eval_cmd(); should not accept a string for if_none. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2679 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/socket/socket.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'ext') diff --git a/ext/socket/socket.c b/ext/socket/socket.c index eb99695a9c..1e91c38c67 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -434,6 +434,7 @@ s_recvfrom(sock, argc, argv, from) char buf[1024]; socklen_t alen = sizeof buf; VALUE len, flg; + long slen; int fd, flags; rb_scan_args(argc, argv, "11", &len, &flg); @@ -447,16 +448,16 @@ s_recvfrom(sock, argc, argv, from) } fd = fileno(fptr->f); - str = rb_tainted_str_new(0, NUM2INT(len)); + slen = NUM2INT(len); + str = rb_tainted_str_new(0, slen); retry: rb_thread_wait_fd(fd); TRAP_BEG; - RSTRING(str)->len = recvfrom(fd, RSTRING(str)->ptr, RSTRING(str)->len, flags, - (struct sockaddr*)buf, &alen); + slen = recvfrom(fd, RSTRING(str)->ptr, slen, flags, (struct sockaddr*)buf, &alen); TRAP_END; - if (RSTRING(str)->len < 0) { + if (slen < 0) { switch (errno) { case EINTR: rb_thread_schedule(); @@ -464,6 +465,10 @@ s_recvfrom(sock, argc, argv, from) } rb_sys_fail("recvfrom(2)"); } + if (slen < RSTRING(str)->len) { + RSTRING(str)->len = slen; + RSTRING(str)->ptr[slen] = '\0'; + } rb_obj_taint(str); switch (from) { case RECV_RECV: -- cgit v1.2.3