From: Andre Noll Date: Mon, 4 Feb 2008 19:41:00 +0000 (+0100) Subject: http_send.c: Fix a bug in http_post_select(). X-Git-Tag: v0.3.1~49 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=3ac7a00c79a39801f497b48385dae580a08c3cf8;hp=2b4a72bab701de1add388f89a92f1b7a358dab79 http_send.c: Fix a bug in http_post_select(). 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. --- diff --git a/http_send.c b/http_send.c index 40f0c0af..f8ee656b 100644 --- a/http_send.c +++ b/http_send.c @@ -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); }