Backport #7775 ยป sockaddr-ignore-truncated-r38993-to-193.patch
ext/socket/basicsocket.c (working copy) | ||
---|---|---|
{
|
||
struct sockaddr_storage buf;
|
||
socklen_t len = (socklen_t)sizeof buf;
|
||
socklen_t len0 = len;
|
||
rb_io_t *fptr;
|
||
GetOpenFile(sock, fptr);
|
||
if (getsockname(fptr->fd, (struct sockaddr*)&buf, &len) < 0)
|
||
rb_sys_fail("getsockname(2)");
|
||
if (len0 < len) len = len0;
|
||
return rb_str_new((char*)&buf, len);
|
||
}
|
||
... | ... | |
{
|
||
struct sockaddr_storage buf;
|
||
socklen_t len = (socklen_t)sizeof buf;
|
||
socklen_t len0 = len;
|
||
rb_io_t *fptr;
|
||
GetOpenFile(sock, fptr);
|
||
if (getpeername(fptr->fd, (struct sockaddr*)&buf, &len) < 0)
|
||
rb_sys_fail("getpeername(2)");
|
||
if (len0 < len) len = len0;
|
||
return rb_str_new((char*)&buf, len);
|
||
}
|
||
... | ... | |
{
|
||
struct sockaddr_storage buf;
|
||
socklen_t len = (socklen_t)sizeof buf;
|
||
socklen_t len0 = len;
|
||
rb_io_t *fptr;
|
||
GetOpenFile(sock, fptr);
|
||
if (getsockname(fptr->fd, (struct sockaddr*)&buf, &len) < 0)
|
||
rb_sys_fail("getsockname(2)");
|
||
if (len0 < len) len = len0;
|
||
return rsock_fd_socket_addrinfo(fptr->fd, (struct sockaddr *)&buf, len);
|
||
}
|
||
... | ... | |
{
|
||
struct sockaddr_storage buf;
|
||
socklen_t len = (socklen_t)sizeof buf;
|
||
socklen_t len0 = len;
|
||
rb_io_t *fptr;
|
||
GetOpenFile(sock, fptr);
|
||
if (getpeername(fptr->fd, (struct sockaddr*)&buf, &len) < 0)
|
||
rb_sys_fail("getpeername(2)");
|
||
if (len0 < len) len = len0;
|
||
return rsock_fd_socket_addrinfo(fptr->fd, (struct sockaddr *)&buf, len);
|
||
}
|
||
ext/socket/unixsocket.c (working copy) | ||
---|---|---|
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);
|
||
... | ... | |
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);
|
||
}
|
||
ext/socket/init.c (working copy) | ||
---|---|---|
rsock_s_accept_nonblock(VALUE klass, rb_io_t *fptr, struct sockaddr *sockaddr, socklen_t *len)
|
||
{
|
||
int fd2;
|
||
socklen_t len0 = len ? *len : 0;
|
||
rb_secure(3);
|
||
rb_io_set_nonblock(fptr);
|
||
... | ... | |
}
|
||
rb_sys_fail("accept(2)");
|
||
}
|
||
if (len && len0 < *len) *len = len0;
|
||
rb_update_max_fd(fd2);
|
||
make_fd_nonblock(fd2);
|
||
return rsock_init_sock(rb_obj_alloc(klass), fd2);
|
||
... | ... | |
accept_blocking(void *data)
|
||
{
|
||
struct accept_arg *arg = data;
|
||
return (VALUE)accept(arg->fd, arg->sockaddr, arg->len);
|
||
int ret;
|
||
socklen_t len0 = 0;
|
||
if (arg->len) len0 = *arg->len;
|
||
ret = accept(arg->fd, arg->sockaddr, arg->len);
|
||
if (arg->len && len0 < *arg->len) *arg->len = len0;
|
||
return (VALUE)ret;
|
||
}
|
||
VALUE
|