summaryrefslogtreecommitdiffstats
path: root/term-utils/wall.c
diff options
context:
space:
mode:
authorYuriy M. Kaminskiy2016-02-27 17:27:29 +0100
committerKarel Zak2016-03-07 15:11:06 +0100
commit06fa5817489adb9728f8a29d4cb7602fb48b8bdb (patch)
treeb3a6f1d0db6b1a6d0e340c1297f243c07c1de618 /term-utils/wall.c
parentlsns.c: fix error return (diff)
downloadkernel-qcow2-util-linux-06fa5817489adb9728f8a29d4cb7602fb48b8bdb.tar.gz
kernel-qcow2-util-linux-06fa5817489adb9728f8a29d4cb7602fb48b8bdb.tar.xz
kernel-qcow2-util-linux-06fa5817489adb9728f8a29d4cb7602fb48b8bdb.zip
misc: safer (and uniform) handling of return value
When `rc` is `INT_MAX`, `rc + 1` result in signed integer overflow. Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'term-utils/wall.c')
-rw-r--r--term-utils/wall.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/term-utils/wall.c b/term-utils/wall.c
index 7d0dfe772..1253d32cd 100644
--- a/term-utils/wall.c
+++ b/term-utils/wall.c
@@ -217,8 +217,8 @@ static void buf_printf(struct buffer *bs, const char *fmt, ...)
rc = vsnprintf(bs->data + bs->used, limit, fmt, ap);
va_end(ap);
- if (rc > 0 && (size_t) rc + 1 > limit) { /* not enoght, enlarge */
- buf_enlarge(bs, rc + 1);
+ if (rc >= 0 && (size_t) rc >= limit) { /* not enoght, enlarge */
+ buf_enlarge(bs, (size_t)rc + 1);
limit = bs->sz - bs->used;
va_start(ap, fmt);
rc = vsnprintf(bs->data + bs->used, limit, fmt, ap);;