diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-12-17 10:47:52 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-12-17 10:47:52 +0000 |
commit | f55973b95a7c78282e41f864f1228746d5bf02fc (patch) | |
tree | 38a55cde494641b4ea896e988aa8c3b475340cb1 /ext/socket | |
parent | 19ae1a985e50bf2af2d62970c998138012e16ddd (diff) | |
download | ruby-f55973b95a7c78282e41f864f1228746d5bf02fc.tar.gz ruby-f55973b95a7c78282e41f864f1228746d5bf02fc.tar.xz ruby-f55973b95a7c78282e41f864f1228746d5bf02fc.zip |
* ext/socket/socket.c (unix_recv_io): relax msg_controllen error
check.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@20847 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/socket')
-rw-r--r-- | ext/socket/socket.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/ext/socket/socket.c b/ext/socket/socket.c index 2f7a07f86..a8b53bd53 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))) { |