diff options
Diffstat (limited to 'ext/socket/unixsocket.c')
-rw-r--r-- | ext/socket/unixsocket.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/ext/socket/unixsocket.c b/ext/socket/unixsocket.c index 26822e5b4f..28defbb263 100644 --- a/ext/socket/unixsocket.c +++ b/ext/socket/unixsocket.c @@ -116,8 +116,10 @@ unix_path(VALUE sock) if (NIL_P(fptr->pathv)) { struct sockaddr_un addr; socklen_t len = (socklen_t)sizeof(addr); + socklen_t len0 = len; if (getsockname(fptr->fd, (struct sockaddr*)&addr, &len) < 0) rb_sys_fail(0); + if (len0 < len) len = len0; fptr->pathv = rb_obj_freeze(rb_str_new_cstr(rsock_unixpath(&addr, len))); } return rb_str_dup(fptr->pathv); @@ -445,11 +447,13 @@ unix_peeraddr(VALUE sock) rb_io_t *fptr; struct sockaddr_un addr; socklen_t len = (socklen_t)sizeof addr; + socklen_t len0 = len; GetOpenFile(sock, fptr); if (getpeername(fptr->fd, (struct sockaddr*)&addr, &len) < 0) rb_sys_fail("getpeername(2)"); + if (len0 < len) len = len0; return rsock_unixaddr(&addr, len); } |