summaryrefslogtreecommitdiff
path: root/src/usr.bin/nc/netcat.c
diff options
context:
space:
mode:
authorbluhm <>2017-02-08 18:03:31 +0000
committerbluhm <>2017-02-08 18:03:31 +0000
commit4b5f7ec676379255496a2e84d8916b76ab07f086 (patch)
treed8d09e148aceffc0b7a5275439576fbc41cdd631 /src/usr.bin/nc/netcat.c
parent25f0619016ce294504632b9617da6fbffe8a925b (diff)
downloadopenbsd-4b5f7ec676379255496a2e84d8916b76ab07f086.tar.gz
openbsd-4b5f7ec676379255496a2e84d8916b76ab07f086.tar.bz2
openbsd-4b5f7ec676379255496a2e84d8916b76ab07f086.zip
Avoid double close(2) in netcat. After every call to readwrite()
there is already a close(2), so do not do it in readwrite(). OK beck@
Diffstat (limited to 'src/usr.bin/nc/netcat.c')
-rw-r--r--src/usr.bin/nc/netcat.c18
1 files changed, 5 insertions, 13 deletions
diff --git a/src/usr.bin/nc/netcat.c b/src/usr.bin/nc/netcat.c
index 8984e8f303..cabb3ceea6 100644
--- a/src/usr.bin/nc/netcat.c
+++ b/src/usr.bin/nc/netcat.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: netcat.c,v 1.173 2017/02/08 13:43:33 bluhm Exp $ */ 1/* $OpenBSD: netcat.c,v 1.174 2017/02/08 18:03:31 bluhm Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> 3 * Copyright (c) 2001 Eric Jackson <ericj@monkey.org>
4 * Copyright (c) 2015 Bob Beck. All rights reserved. 4 * Copyright (c) 2015 Bob Beck. All rights reserved.
@@ -1047,21 +1047,15 @@ readwrite(int net_fd, struct tls *tls_ctx)
1047 while (1) { 1047 while (1) {
1048 /* both inputs are gone, buffers are empty, we are done */ 1048 /* both inputs are gone, buffers are empty, we are done */
1049 if (pfd[POLL_STDIN].fd == -1 && pfd[POLL_NETIN].fd == -1 && 1049 if (pfd[POLL_STDIN].fd == -1 && pfd[POLL_NETIN].fd == -1 &&
1050 stdinbufpos == 0 && netinbufpos == 0) { 1050 stdinbufpos == 0 && netinbufpos == 0)
1051 close(net_fd);
1052 return; 1051 return;
1053 }
1054 /* both outputs are gone, we can't continue */ 1052 /* both outputs are gone, we can't continue */
1055 if (pfd[POLL_NETOUT].fd == -1 && pfd[POLL_STDOUT].fd == -1) { 1053 if (pfd[POLL_NETOUT].fd == -1 && pfd[POLL_STDOUT].fd == -1)
1056 close(net_fd);
1057 return; 1054 return;
1058 }
1059 /* listen and net in gone, queues empty, done */ 1055 /* listen and net in gone, queues empty, done */
1060 if (lflag && pfd[POLL_NETIN].fd == -1 && 1056 if (lflag && pfd[POLL_NETIN].fd == -1 &&
1061 stdinbufpos == 0 && netinbufpos == 0) { 1057 stdinbufpos == 0 && netinbufpos == 0)
1062 close(net_fd);
1063 return; 1058 return;
1064 }
1065 1059
1066 /* help says -i is for "wait between lines sent". We read and 1060 /* help says -i is for "wait between lines sent". We read and
1067 * write arbitrary amounts of data, and we don't want to start 1061 * write arbitrary amounts of data, and we don't want to start
@@ -1073,10 +1067,8 @@ readwrite(int net_fd, struct tls *tls_ctx)
1073 num_fds = poll(pfd, 4, timeout); 1067 num_fds = poll(pfd, 4, timeout);
1074 1068
1075 /* treat poll errors */ 1069 /* treat poll errors */
1076 if (num_fds == -1) { 1070 if (num_fds == -1)
1077 close(net_fd);
1078 err(1, "polling error"); 1071 err(1, "polling error");
1079 }
1080 1072
1081 /* timeout happened */ 1073 /* timeout happened */
1082 if (num_fds == 0) 1074 if (num_fds == 0)