http_send.c: Fix a bug in http_post_select().
authorAndre Noll <maan@systemlinux.org>
Mon, 4 Feb 2008 19:41:00 +0000 (20:41 +0100)
committerAndre Noll <maan@systemlinux.org>
Mon, 4 Feb 2008 19:41:00 +0000 (20:41 +0100)
If the accept() on the listen_fd fails, we don't have a valid
file descriptor but tried to close it anyway. Even worse, the
old code dereferenced and then freed the "sc" pointer which
isn't inititialized at that point.

http_send.c

index 40f0c0a..f8ee656 100644 (file)
@@ -136,8 +136,10 @@ static void http_post_select(fd_set *rfds, __a_unused fd_set *wfds)
        if (!FD_ISSET(listen_fd, rfds))
                return;
        ret = para_accept(listen_fd, NULL, 0);
-       if (ret < 0)
-               goto err_out;
+       if (ret < 0) {
+               PARA_ERROR_LOG("%s\n", para_strerror(-ret));
+               return;
+       }
        sc = para_calloc(sizeof(*sc));
        sc->fd = ret;
        sc->name = make_message("%s", remote_name(sc->fd));
@@ -168,8 +170,7 @@ static void http_post_select(fd_set *rfds, __a_unused fd_set *wfds)
        return;
 err_out:
        PARA_WARNING_LOG("%s\n", para_strerror(-ret));
-       if (sc->fd > 0)
-               close(sc->fd);
+       close(sc->fd);
        free(sc);
 }