summaryrefslogtreecommitdiffstats
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
commitf55973b95a7c78282e41f864f1228746d5bf02fc (patch)
tree38a55cde494641b4ea896e988aa8c3b475340cb1
parent19ae1a985e50bf2af2d62970c998138012e16ddd (diff)
downloadruby-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
-rw-r--r--ChangeLog5
-rw-r--r--ext/socket/socket.c9
2 files changed, 12 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 724fdc626..63773b985 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 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))) {