summaryrefslogtreecommitdiffstats
path: root/usr.sbin/smtpd/queue_fsqueue.c
diff options
context:
space:
mode:
authoreric <eric@openbsd.org>2013-01-31 18:34:43 +0000
committereric <eric@openbsd.org>2013-01-31 18:34:43 +0000
commit1c6ac25114bf06f7d43719e74b098aea17cee49c (patch)
treec6a9197bc346c4c8a38fb7caf01b634152987a65 /usr.sbin/smtpd/queue_fsqueue.c
parentdo not need to tweak the socket sndbuf, now that the envelopes are passed (diff)
downloadwireguard-openbsd-1c6ac25114bf06f7d43719e74b098aea17cee49c.tar.xz
wireguard-openbsd-1c6ac25114bf06f7d43719e74b098aea17cee49c.zip
assorted fixes spotted by Coverity.
some log message updates. ok gilles@
Diffstat (limited to 'usr.sbin/smtpd/queue_fsqueue.c')
-rw-r--r--usr.sbin/smtpd/queue_fsqueue.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/usr.sbin/smtpd/queue_fsqueue.c b/usr.sbin/smtpd/queue_fsqueue.c
index d640f5b6ef2..c4a10fcbe54 100644
--- a/usr.sbin/smtpd/queue_fsqueue.c
+++ b/usr.sbin/smtpd/queue_fsqueue.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: queue_fsqueue.c,v 1.57 2013/01/26 09:37:23 gilles Exp $ */
+/* $OpenBSD: queue_fsqueue.c,v 1.58 2013/01/31 18:34:43 eric Exp $ */
/*
* Copyright (c) 2011 Gilles Chehade <gilles@poolp.org>
@@ -157,8 +157,9 @@ fsqueue_envelope_dump(char *dest, char *evpbuf, size_t evplen, int do_atomic, in
log_warn("warn: fsqueue_envelope_dump: fsync");
goto tempfail;
}
- if (fclose(fp)) {
+ if (fclose(fp) != 0) {
log_warn("warn: fsqueue_envelope_dump: fclose");
+ fp = NULL;
goto tempfail;
}
fp = NULL;
@@ -229,7 +230,7 @@ fsqueue_envelope_load(uint64_t evpid, char *buf, size_t len)
{
char pathname[MAXPATHLEN];
FILE *fp;
- ssize_t r;
+ size_t r;
fsqueue_envelope_path(evpid, pathname, sizeof(pathname));
@@ -241,7 +242,14 @@ fsqueue_envelope_load(uint64_t evpid, char *buf, size_t len)
}
r = fread(buf, 1, len, fp);
-
+ if (r) {
+ if (r == len) {
+ log_warn("warn: fsqueue_envelope_load: too large");
+ r = 0;
+ }
+ else
+ buf[r] = '\0';
+ }
fclose(fp);
return (r);
@@ -297,6 +305,7 @@ fsqueue_envelope_walk(uint64_t *evpid, char *buf, size_t len)
hdl = fsqueue_qwalk_new();
if (fsqueue_qwalk(hdl, evpid)) {
+ bzero(buf, len);
r = fsqueue_envelope_load(*evpid, buf, len);
if (r) {
msgid = evpid_to_msgid(*evpid);