diff --git a/main/logger.c b/main/logger.c index e9f8f96619..d742b49975 100644 --- a/main/logger.c +++ b/main/logger.c @@ -97,6 +97,11 @@ static int logger_queue_limit = 1000; 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 struct sigaction handle_SIGXFSZ = { 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 @@ static void logger_print_normal(struct logmsg *logmsg) /* 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 @@ static void logger_print_normal(struct logmsg *logmsg) 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 @@ static struct logmsg * __attribute__((format(printf, 7, 0))) format_log_message_ } /* 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) {