diff --git a/logging.c b/logging.c index f1e372958..49269ec3c 100644 --- a/logging.c +++ b/logging.c @@ -43,7 +43,10 @@ static void logwrite(struct LogContext *ctx, void *data, int len) bufchain_add(&ctx->queue, data, len); } else if (ctx->state == L_OPEN) { assert(ctx->lgfp); - fwrite(data, 1, len, ctx->lgfp); + if (fwrite(data, 1, len, ctx->lgfp) < len) { + logfclose(ctx); + ctx->state = L_ERROR; + } } /* else L_ERROR, so ignore the write */ } diff --git a/pscp.c b/pscp.c index ab3077bd8..451bdb03f 100644 --- a/pscp.c +++ b/pscp.c @@ -178,7 +178,8 @@ int from_backend(void *frontend, int is_stderr, const char *data, int datalen) */ if (is_stderr) { if (len > 0) - fwrite(data, 1, len, stderr); + if (fwrite(data, 1, len, stderr) < len) + /* oh well */; return 0; } diff --git a/psftp.c b/psftp.c index e0fbee8d8..65d52c3bd 100644 --- a/psftp.c +++ b/psftp.c @@ -2518,7 +2518,8 @@ int from_backend(void *frontend, int is_stderr, const char *data, int datalen) */ if (is_stderr) { if (len > 0) - fwrite(data, 1, len, stderr); + if (fwrite(data, 1, len, stderr) < len) + /* oh well */; return 0; } diff --git a/unix/uxcons.c b/unix/uxcons.c index 2021f40eb..11c59a8a8 100644 --- a/unix/uxcons.c +++ b/unix/uxcons.c @@ -161,7 +161,8 @@ int verify_ssh_host_key(void *frontend, char *host, int port, char *keytype, newmode.c_lflag |= ECHO | ISIG | ICANON; tcsetattr(0, TCSANOW, &newmode); line[0] = '\0'; - read(0, line, sizeof(line) - 1); + if (read(0, line, sizeof(line) - 1) <= 0) + /* handled below */; tcsetattr(0, TCSANOW, &oldmode); } @@ -213,7 +214,8 @@ int askalg(void *frontend, const char *algtype, const char *algname, newmode.c_lflag |= ECHO | ISIG | ICANON; tcsetattr(0, TCSANOW, &newmode); line[0] = '\0'; - read(0, line, sizeof(line) - 1); + if (read(0, line, sizeof(line) - 1) <= 0) + /* handled below */; tcsetattr(0, TCSANOW, &oldmode); } @@ -266,7 +268,8 @@ int askappend(void *frontend, Filename filename, newmode.c_lflag |= ECHO | ISIG | ICANON; tcsetattr(0, TCSANOW, &newmode); line[0] = '\0'; - read(0, line, sizeof(line) - 1); + if (read(0, line, sizeof(line) - 1) <= 0) + /* handled below */; tcsetattr(0, TCSANOW, &oldmode); } diff --git a/unix/uxplink.c b/unix/uxplink.c index 6d9a9b75a..cbfcc7133 100644 --- a/unix/uxplink.c +++ b/unix/uxplink.c @@ -513,7 +513,8 @@ int signalpipe[2]; void sigwinch(int signum) { - write(signalpipe[1], "x", 1); + if (write(signalpipe[1], "x", 1) <= 0) + /* not much we can do about it */; } /* @@ -1030,7 +1031,9 @@ int main(int argc, char **argv) if (FD_ISSET(signalpipe[0], &rset)) { char c[1]; struct winsize size; - read(signalpipe[0], c, 1); /* ignore its value; it'll be `x' */ + if (read(signalpipe[0], c, 1) <= 0) + /* ignore error */; + /* ignore its value; it'll be `x' */ if (ioctl(0, TIOCGWINSZ, (void *)&size) >= 0) back->size(backhandle, size.ws_col, size.ws_row); } diff --git a/unix/uxpty.c b/unix/uxpty.c index ca7e98adf..5de43a3a5 100644 --- a/unix/uxpty.c +++ b/unix/uxpty.c @@ -260,7 +260,8 @@ static void cleanup_utmp(void) static void sigchld_handler(int signum) { - write(pty_signal_pipe[1], "x", 1); + if (write(pty_signal_pipe[1], "x", 1) <= 0) + /* not much we can do about it */; } #ifndef OMIT_UTMP @@ -633,7 +634,9 @@ int pty_select_result(int fd, int event) int status; char c[1]; - read(pty_signal_pipe[0], c, 1); /* ignore its value; it'll be `x' */ + if (read(pty_signal_pipe[0], c, 1) <= 0) + /* ignore error */; + /* ignore its value; it'll be `x' */ do { pid = waitpid(-1, &status, WNOHANG);