ソースを参照

Avoid a double-close on one failing case of the socketpair replacement code

Fix for bug 9400, spotted by coverity. Bug introduced in revision 2cb4f7a4
(subversion revision r389).
Nick Mathewson 11 年 前
コミット
d819663b66
2 ファイル変更8 行追加1 行削除
  1. 7 0
      changes/bug9400
  2. 1 1
      src/common/compat.c

+ 7 - 0
changes/bug9400

@@ -0,0 +1,7 @@
+  o Minor bugfixes:
+
+    - Avoid double-closing the listener socket in our socketpair replacement
+      (used on Windows) in the case where the addresses on our opened
+      sockets don't match what we expected. Fixes bug 9400; bugfix on
+      every released Tor version. Found by Coverity.
+

+ 1 - 1
src/common/compat.c

@@ -1281,7 +1281,6 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
       goto tidy_up_and_fail;
     if (size != sizeof(listen_addr))
       goto abort_tidy_up_and_fail;
-    tor_close_socket(listener);
     /* Now check we are talking to ourself by matching port and host on the
        two sockets.  */
     if (getsockname(connector, (struct sockaddr *) &connect_addr, &size) == -1)
@@ -1292,6 +1291,7 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
         || listen_addr.sin_port != connect_addr.sin_port) {
       goto abort_tidy_up_and_fail;
     }
+    tor_close_socket(listener);
     fd[0] = connector;
     fd[1] = acceptor;