fix size use for stdin segmentation fault on invalid unicode input passed to -s option cherry-pick from: 10e9faf901605af5713bc89a5a36631f2025a956
62 lines
1.9 KiB
Diff
62 lines
1.9 KiB
Diff
From 58e4ee082bca100034791a4a74481f263bb30a25 Mon Sep 17 00:00:00 2001
|
||
From: Karel Zak <kzak@redhat.com>
|
||
Date: Thu, 21 Oct 2021 18:47:40 +0200
|
||
Subject: [PATCH] logger: fix --size use for stdin
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
The stdin version counts log header into the message size, but
|
||
for example when it reads message from argv[] it counts only message
|
||
itself.
|
||
|
||
$ logger --stderr --size 3 "abcd"
|
||
<13>Oct 21 18:48:29 kzak: abc
|
||
|
||
$ echo "abcd" | logger --stderr --size 3
|
||
logger: cannot allocate 18446744073709551597 bytes: Cannot allocate memory
|
||
|
||
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=2011602
|
||
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||
---
|
||
misc-utils/logger.c | 13 ++-----------
|
||
1 file changed, 2 insertions(+), 11 deletions(-)
|
||
|
||
diff --git a/misc-utils/logger.c b/misc-utils/logger.c
|
||
index 25ff2b9308..50ae211056 100644
|
||
--- a/misc-utils/logger.c
|
||
+++ b/misc-utils/logger.c
|
||
@@ -976,9 +976,7 @@ static void logger_stdin(struct logger_ctl *ctl)
|
||
*/
|
||
int default_priority = ctl->pri;
|
||
int last_pri = default_priority;
|
||
- size_t max_usrmsg_size = ctl->max_message_size - strlen(ctl->hdr);
|
||
- size_t allocated_usrmsg_size = max_usrmsg_size;
|
||
- char *buf = xmalloc(allocated_usrmsg_size + 2 + 2);
|
||
+ char *buf = xmalloc(ctl->max_message_size + 2 + 2);
|
||
int pri;
|
||
int c;
|
||
size_t i;
|
||
@@ -1006,20 +1004,13 @@ static void logger_stdin(struct logger_ctl *ctl)
|
||
|
||
if (ctl->pri != last_pri) {
|
||
generate_syslog_header(ctl);
|
||
- max_usrmsg_size = ctl->max_message_size - strlen(ctl->hdr);
|
||
-
|
||
- if (max_usrmsg_size > allocated_usrmsg_size) {
|
||
- allocated_usrmsg_size = max_usrmsg_size;
|
||
- buf = xrealloc(buf, allocated_usrmsg_size + 2 + 2);
|
||
- }
|
||
-
|
||
last_pri = ctl->pri;
|
||
}
|
||
if (c != EOF && c != '\n')
|
||
c = getchar();
|
||
}
|
||
|
||
- while (c != EOF && c != '\n' && i < max_usrmsg_size) {
|
||
+ while (c != EOF && c != '\n' && i < ctl->max_message_size) {
|
||
buf[i++] = c;
|
||
c = getchar();
|
||
}
|