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 d3b3343..15d5dc5 100644
--- a/misc-utils/logger.c
+++ b/misc-utils/logger.c
@@ -981,9 +981,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;
@@ -1011,20 +1009,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();
 		}
-- 
2.27.0

