]> granicus.if.org Git - libevent/commitdiff
Avoid double-close on getsockname error in evutil_ersatz_socketpair
authorNick Mathewson <nickm@torproject.org>
Thu, 20 Dec 2012 16:48:05 +0000 (11:48 -0500)
committerNick Mathewson <nickm@torproject.org>
Thu, 20 Dec 2012 16:48:05 +0000 (11:48 -0500)
Found by coverity; CID 739726

evutil.c

index e17e5b8acf2efec15d2077d498c6f5296875a942..1627809ddfcaeb9ed1a704642f0eff4654e99f02 100644 (file)
--- a/evutil.c
+++ b/evutil.c
@@ -259,7 +259,6 @@ evutil_ersatz_socketpair(int family, int type, int protocol,
                goto tidy_up_and_fail;
        if (size != sizeof(listen_addr))
                goto abort_tidy_up_and_fail;
-       evutil_closesocket(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)
@@ -269,6 +268,7 @@ evutil_ersatz_socketpair(int family, int type, int protocol,
                || listen_addr.sin_addr.s_addr != connect_addr.sin_addr.s_addr
                || listen_addr.sin_port != connect_addr.sin_port)
                goto abort_tidy_up_and_fail;
+       evutil_closesocket(listener);
        fd[0] = connector;
        fd[1] = acceptor;