From ac4bedfafe5ae2f688c4f54cb1f99ce275110186 Mon Sep 17 00:00:00 2001 From: Boris Tonofa Date: Fri, 20 Jun 2025 18:16:16 +0300 Subject: [PATCH] Xslt: fix handling of vsnprintf() return value --- src/http/modules/ngx_http_xslt_filter_module.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/http/modules/ngx_http_xslt_filter_module.c b/src/http/modules/ngx_http_xslt_filter_module.c index 4e6e1b99d..38bc7c52b 100644 --- a/src/http/modules/ngx_http_xslt_filter_module.c +++ b/src/http/modules/ngx_http_xslt_filter_module.c @@ -465,7 +465,7 @@ ngx_http_xslt_sax_error(void *data, const char *msg, ...) { xmlParserCtxtPtr ctxt = data; - size_t n; + int n; va_list args; ngx_http_xslt_filter_ctx_t *ctx; u_char buf[NGX_MAX_ERROR_STR]; @@ -475,13 +475,23 @@ ngx_http_xslt_sax_error(void *data, const char *msg, ...) buf[0] = '\0'; va_start(args, msg); - n = (size_t) vsnprintf((char *) buf, NGX_MAX_ERROR_STR, msg, args); + n = vsnprintf((char *) buf, NGX_MAX_ERROR_STR, msg, args); va_end(args); + if (n <= 0) { + ngx_log_error(NGX_LOG_ERR, ctx->request->connection->log, ngx_errno, + "libxml2 error"); + return; + } + + if (n > NGX_MAX_ERROR_STR) { + n = NGX_MAX_ERROR_STR; + } + while (--n && (buf[n] == CR || buf[n] == LF)) { /* void */ } ngx_log_error(NGX_LOG_ERR, ctx->request->connection->log, 0, - "libxml2 error: \"%*s\"", n + 1, buf); + "libxml2 error: \"%*s\"", (size_t) (n + 1), buf); } -- 2.47.3