Browse code

add check for msg.controllen, apparently Mac OS X sets it to 0, but CMSG_FIRSTHDR is not NULL!

git-svn: trunk@4761

Török Edvin authored on 2009/02/13 02:47:36
Showing 2 changed files
... ...
@@ -1,3 +1,8 @@
1
+Thu Feb 12 20:16:25 EET 2009 (edwin)
2
+------------------------------------
3
+ * clamd/others.c: add check for msg.controllen, apparently Mac OS X
4
+     sets it to 0, but CMSG_FIRSTHDR is not NULL!
5
+
1 6
 Thu Feb 12 20:09:17 EET 2009 (edwin)
2 7
 ------------------------------------
3 8
  * unit_tests/checks_common.h: add missing file
... ...
@@ -282,17 +282,19 @@ static int read_fd_data(struct fd_buf *buf)
282 282
 	  logg("!control message truncated");
283 283
 	  return -1;
284 284
       }
285
-      for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL;
286
-	   cmsg = CMSG_NXTHDR(&msg, cmsg)) {
287
-	  if (cmsg->cmsg_len == CMSG_LEN(sizeof(int)) &&
288
-	      cmsg->cmsg_level == SOL_SOCKET &&
289
-	      cmsg->cmsg_type == SCM_RIGHTS) {
290
-	      if (buf->recvfd != -1) {
291
-		  logg("^Unclaimed file descriptor received. closing\n");
292
-		  close(buf->recvfd);
285
+      if (msg.msg_controllen) {
286
+	  for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL;
287
+	       cmsg = CMSG_NXTHDR(&msg, cmsg)) {
288
+	      if (cmsg->cmsg_len == CMSG_LEN(sizeof(int)) &&
289
+		  cmsg->cmsg_level == SOL_SOCKET &&
290
+		  cmsg->cmsg_type == SCM_RIGHTS) {
291
+		  if (buf->recvfd != -1) {
292
+		      logg("^Unclaimed file descriptor received. closing\n");
293
+		      close(buf->recvfd);
294
+		  }
295
+		  buf->recvfd = *(int *)CMSG_DATA(cmsg);
296
+		  logg("*RECVMSG: got FD %d\n", buf->recvfd);
293 297
 	      }
294
-	      buf->recvfd = *(int *)CMSG_DATA(cmsg);
295
-	      logg("*RECVMSG: got FD %d\n", buf->recvfd);
296 298
 	  }
297 299
       }
298 300
   }