diff options
| author | Jakub Hrozek <jhrozek@redhat.com> | 2014-04-10 11:41:31 +0200 |
|---|---|---|
| committer | Andreas Schneider <asn@samba.org> | 2014-04-14 15:29:13 +0200 |
| commit | 32c9508b13218d4594c9991d218c93eff1545c86 (patch) | |
| tree | ba9064a7ea58aafa628f6ad14c9c0ffb8a5f877e | |
| parent | 4ed4524c5851bbb042caa052f66263b734cf5546 (diff) | |
| download | socket_wrapper-32c9508b13218d4594c9991d218c93eff1545c86.tar.gz socket_wrapper-32c9508b13218d4594c9991d218c93eff1545c86.tar.xz socket_wrapper-32c9508b13218d4594c9991d218c93eff1545c86.zip | |
echo_srv: Don't leak client_sock on failures in echo_tcp
Signed-off-by: Jakub Hrozek <jhrozek@redhat.com>
Reviewed-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Simo Sorce <idra@samba.org>
| -rw-r--r-- | tests/echo_srv.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/tests/echo_srv.c b/tests/echo_srv.c index e7e6e6c..59d5680 100644 --- a/tests/echo_srv.c +++ b/tests/echo_srv.c @@ -395,41 +395,42 @@ static void echo_tcp(int sock) char buf[BUFSIZE]; ssize_t bret; - int client_sock; + int client_sock = -1; int s; s = accept(sock, (struct sockaddr *)&css, &addrlen); if (s == -1) { perror("accept"); - return; + goto done; } client_sock = socket_dup(s); if (client_sock == -1) { perror("socket_dup"); - return; + goto done; } /* Start ping pong */ while (1) { bret = recv(client_sock, buf, BUFSIZE, 0); if (bret == -1) { - close(client_sock); perror("recv"); - continue; + goto done; } else if (bret == 0) { break; } bret = send(client_sock, buf, bret, 0); if (bret == -1) { - close(client_sock); perror("send"); - continue; + goto done; } } - close(client_sock); +done: + if (client_sock != -1) { + close(client_sock); + } } static void echo_udp(int sock) |
