summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Guenther <guenther@cvs.openbsd.org>2017-02-28 06:31:13 +0000
committerPhilip Guenther <guenther@cvs.openbsd.org>2017-02-28 06:31:13 +0000
commitf282959c1164a8553d8350fba8f1fb4177080cde (patch)
tree1beed60a38211c38e720fa34053661f3b49f8a8e
parent9eda78306030571542c92dce577d75eefb571dee (diff)
Use a do{}while loop with ssize_t return value when calling tls_read()
problem noted by and ok jsg@
-rw-r--r--usr.bin/ftp/fetch.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/usr.bin/ftp/fetch.c b/usr.bin/ftp/fetch.c
index 636d5093d0f..3b8a6c62866 100644
--- a/usr.bin/ftp/fetch.c
+++ b/usr.bin/ftp/fetch.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fetch.c,v 1.160 2017/01/21 08:33:07 krw Exp $ */
+/* $OpenBSD: fetch.c,v 1.161 2017/02/28 06:31:12 guenther Exp $ */
/* $NetBSD: fetch.c,v 1.14 1997/08/18 10:20:20 lukem Exp $ */
/*-
@@ -1502,7 +1502,7 @@ size_t
ftp_read(FILE *fp, struct tls *tls, char *buf, size_t len)
{
#ifndef NOSSL
- ssize_t tls_ret;
+ ssize_t tret;
#endif
size_t ret = 0;
@@ -1510,13 +1510,12 @@ ftp_read(FILE *fp, struct tls *tls, char *buf, size_t len)
ret = fread(buf, sizeof(char), len, fp);
#ifndef NOSSL
else if (tls != NULL) {
- again:
- if ((tls_ret = tls_read(tls, buf, len)) >= 0)
- ret = (size_t)tls_ret;
- if (ret == TLS_WANT_POLLIN || ret == TLS_WANT_POLLOUT)
- goto again;
- if (ret < 0)
+ do {
+ tret = tls_read(tls, buf, len);
+ } while (tret == TLS_WANT_POLLIN || tret == TLS_WANT_POLLOUT);
+ if (tret < 0)
errx(1, "SSL read error: %s", tls_error(tls));
+ ret = (size_t)tret;
}
#endif /* !NOSSL */
return (ret);
@@ -1592,10 +1591,9 @@ SSL_readline(struct tls *tls, size_t *lenp)
buf = q;
len *= 2;
}
-again:
- ret = tls_read(tls, &c, 1);
- if (ret == TLS_WANT_POLLIN || ret == TLS_WANT_POLLOUT)
- goto again;
+ do {
+ ret = tls_read(tls, &c, 1);
+ } while (ret == TLS_WANT_POLLIN || ret == TLS_WANT_POLLOUT);
if (ret < 0)
errx(1, "SSL read error: %s", tls_error(tls));