summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormillert <millert@openbsd.org>2015-10-12 21:32:27 +0000
committermillert <millert@openbsd.org>2015-10-12 21:32:27 +0000
commitda01648b8bb2177933485864ad5494309428d2d8 (patch)
tree5b9d4495d8cd0807bf3c8a9ec4eb6cb46b688f00
parentDelete an assignment that is unconditionally overwritten two lines later; (diff)
downloadwireguard-openbsd-da01648b8bb2177933485864ad5494309428d2d8.tar.xz
wireguard-openbsd-da01648b8bb2177933485864ad5494309428d2d8.zip
Add missing checks for write errors; OK eric@
-rw-r--r--usr.sbin/smtpd/enqueue.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/usr.sbin/smtpd/enqueue.c b/usr.sbin/smtpd/enqueue.c
index d05bbd89149..7d8c3fd5d0f 100644
--- a/usr.sbin/smtpd/enqueue.c
+++ b/usr.sbin/smtpd/enqueue.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: enqueue.c,v 1.98 2015/10/09 15:09:09 gilles Exp $ */
+/* $OpenBSD: enqueue.c,v 1.99 2015/10/12 21:32:27 millert Exp $ */
/*
* Copyright (c) 2005 Henning Brauer <henning@bulabula.org>
@@ -814,17 +814,17 @@ enqueue_offline(int argc, char *argv[], FILE *ifile, FILE *ofile)
ftruncate(fileno(ofile), 0);
exit(EX_SOFTWARE);
}
- fprintf(ofile, "%s%s", i == 1 ? "" : "|", argv[i]);
+ if (fprintf(ofile, "%s%s", i == 1 ? "" : "|", argv[i]) < 0)
+ goto write_error;
}
- fprintf(ofile, "\n");
+ if (fputc('\n', ofile) == EOF)
+ goto write_error;
- while ((ch = fgetc(ifile)) != EOF)
- if (fputc(ch, ofile) == EOF) {
- warn("write error");
- ftruncate(fileno(ofile), 0);
- exit(EX_UNAVAILABLE);
- }
+ while ((ch = fgetc(ifile)) != EOF) {
+ if (fputc(ch, ofile) == EOF)
+ goto write_error;
+ }
if (ferror(ifile)) {
warn("read error");
@@ -832,9 +832,14 @@ enqueue_offline(int argc, char *argv[], FILE *ifile, FILE *ofile)
exit(EX_UNAVAILABLE);
}
- fclose(ofile);
+ if (fclose(ofile) == EOF)
+ goto write_error;
return (EX_TEMPFAIL);
+write_error:
+ warn("write error");
+ ftruncate(fileno(ofile), 0);
+ exit(EX_UNAVAILABLE);
}
static int