]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
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 40f0c0af2ee5995e7901c9aeffdb38feeb2f14fe..f8ee656baa8f4c02b5386d724d5f9be55b5b3e95 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);
 }