diff options
| author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-12-19 11:37:25 +0000 |
|---|---|---|
| committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-12-19 11:37:25 +0000 |
| commit | b261f5d831a50db25664ff4bdc0df7664b6885b3 (patch) | |
| tree | 68d1eca1b97fad28e960f9ac0feec82055906c72 | |
| parent | b67d1000ae6c54d953fe2ed414fa7c274d7b463a (diff) | |
merges r20847 from trunk into ruby_1_9_1.
* ext/socket/socket.c (unix_recv_io): relax msg_controllen error
check.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@20878 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | ChangeLog | 5 | ||||
| -rw-r--r-- | ext/socket/socket.c | 9 |
2 files changed, 12 insertions, 2 deletions
@@ -1,3 +1,8 @@ +Wed Dec 17 19:39:44 2008 Tanaka Akira <akr@fsij.org> + + * ext/socket/socket.c (unix_recv_io): relax msg_controllen error + check. + Wed Dec 17 19:37:30 2008 Tanaka Akira <akr@fsij.org> * ext/pty/extconf.rb: check util.h for OpenBSD. 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))) { |
