summaryrefslogtreecommitdiff
path: root/ext/socket/socket.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-12-17 10:47:52 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-12-17 10:47:52 +0000
commit0a3a98aea4a168dc462e2ed770c0f2dc9c0bd902 (patch)
tree38a55cde494641b4ea896e988aa8c3b475340cb1 /ext/socket/socket.c
parent8ae0a40d029efe557a6f6b7907b98b12dccaab6b (diff)
* ext/socket/socket.c (unix_recv_io): relax msg_controllen error
check. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20847 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/socket/socket.c')
-rw-r--r--ext/socket/socket.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index 2f7a07f864..a8b53bd534 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -2118,9 +2118,14 @@ unix_recv_io(int argc, VALUE *argv, VALUE sock)
rb_sys_fail("recvmsg(2)");
#if FD_PASSING_BY_MSG_CONTROL
- if (arg.msg.msg_controllen != CMSG_SPACE(sizeof(int))) {
+ if (arg.msg.msg_controllen < CMSG_LEN(sizeof(int))) {
rb_raise(rb_eSocket,
- "file descriptor was not passed (msg_controllen=%d, %d expected)",
+ "file descriptor was not passed (msg_controllen=%d smaller than CMSG_LEN(sizeof(int))=%d)",
+ (int)arg.msg.msg_controllen, (int)CMSG_LEN(sizeof(int)));
+ }
+ if (CMSG_SPACE(sizeof(int)) < arg.msg.msg_controllen) {
+ rb_raise(rb_eSocket,
+ "file descriptor was not passed (msg_controllen=%d bigger than CMSG_SPACE(sizeof(int))=%d)",
(int)arg.msg.msg_controllen, (int)CMSG_SPACE(sizeof(int)));
}
if (cmsg.hdr.cmsg_len != CMSG_LEN(sizeof(int))) {