[Asterisk-code-review] logger: workaround woefully small BUFSIZ in MUSL (asterisk[16])

Friendly Automation asteriskteam at digium.com
Wed Mar 23 16:16:21 CDT 2022


Friendly Automation has submitted this change. ( https://gerrit.asterisk.org/c/asterisk/+/18105 )

Change subject: logger: workaround woefully small BUFSIZ in MUSL
......................................................................

logger: workaround woefully small BUFSIZ in MUSL

MUSL defines BUFSIZ as 1024 which is not reasonable for log messages.

More broadly, BUFSIZ is the amount of buffering stdio.h does, which
is arbitrary and largely orthogonal to what logging should accept
as the maximum message size.

ASTERISK-29928

Signed-off-by: Philip Prindeville <philipp at redfish-solutions.com>
Change-Id: Iaa49fbbab029c64ae3d95e4b18270e0442cce170
---
M main/logger.c
1 file changed, 10 insertions(+), 5 deletions(-)

Approvals:
  Joshua Colp: Looks good to me, but someone else must approve
  Benjamin Keith Ford: Looks good to me, approved
  Friendly Automation: Approved for Submit



diff --git a/main/logger.c b/main/logger.c
index e9f8f96..d742b49 100644
--- a/main/logger.c
+++ b/main/logger.c
@@ -97,6 +97,11 @@
 static int logger_messages_discarded;
 static unsigned int high_water_alert;
 
+/* On some platforms, like those with MUSL as the runtime, BUFSIZ is
+ * unreasonably small (1024). Use a larger value in those environments.
+ */
+#define LOGMSG_SIZE		MAX(BUFSIZ, 8192)
+
 static enum rotatestrategy {
 	NONE = 0,                /* Do not rotate log files at all, instead rely on external mechanisms */
 	SEQUENTIAL = 1 << 0,     /* Original method - create a new file, in order */
@@ -1665,7 +1670,7 @@
 static void logger_print_normal(struct logmsg *logmsg)
 {
 	struct logchannel *chan = NULL;
-	char buf[BUFSIZ];
+	char buf[LOGMSG_SIZE];
 	int level = 0;
 
 	AST_RWLIST_RDLOCK(&logchannels);
@@ -1698,13 +1703,13 @@
 
 					/* Don't use LOG_MAKEPRI because it's broken in glibc<2.17 */
 					syslog_level = chan->facility | syslog_level; /* LOG_MAKEPRI(chan->facility, syslog_level); */
-					if (!chan->formatter.format_log(chan, logmsg, buf, BUFSIZ)) {
+					if (!chan->formatter.format_log(chan, logmsg, buf, sizeof(buf))) {
 						syslog(syslog_level, "%s", buf);
 					}
 				}
 				break;
 			case LOGTYPE_CONSOLE:
-				if (!chan->formatter.format_log(chan, logmsg, buf, BUFSIZ)) {
+				if (!chan->formatter.format_log(chan, logmsg, buf, sizeof(buf))) {
 					ast_console_puts_mutable_full(buf, logmsg->level, logmsg->sublevel);
 				}
 				break;
@@ -1716,7 +1721,7 @@
 						continue;
 					}
 
-					if (chan->formatter.format_log(chan, logmsg, buf, BUFSIZ)) {
+					if (chan->formatter.format_log(chan, logmsg, buf, sizeof(buf))) {
 						continue;
 					}
 
@@ -1780,7 +1785,7 @@
 	}
 
 	/* Build string */
-	res = ast_str_set_va(&buf, BUFSIZ, fmt, ap);
+	res = ast_str_set_va(&buf, LOGMSG_SIZE, fmt, ap);
 
 	/* If the build failed, then abort and free this structure */
 	if (res == AST_DYNSTR_BUILD_FAILED) {

-- 
To view, visit https://gerrit.asterisk.org/c/asterisk/+/18105
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: 16
Gerrit-Change-Id: Iaa49fbbab029c64ae3d95e4b18270e0442cce170
Gerrit-Change-Number: 18105
Gerrit-PatchSet: 4
Gerrit-Owner: Philip Prindeville <philipp at redfish-solutions.com>
Gerrit-Reviewer: Benjamin Keith Ford <bford at digium.com>
Gerrit-Reviewer: Friendly Automation
Gerrit-Reviewer: Joshua Colp <jcolp at sangoma.com>
Gerrit-Reviewer: Kevin Harwell <kharwell at digium.com>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20220323/13c63574/attachment.html>


More information about the asterisk-code-review mailing list