From 1f55026cd5029e867cae3c5c2b4af8b67a2c54f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rickard=20Hallerb=C3=A4ck?= Date: Wed, 13 Sep 2023 16:01:46 +0200 Subject: [PATCH] metal : logging va_args memory fix --- ggml-metal.m | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/ggml-metal.m b/ggml-metal.m index 8530df792..c508e4853 100644 --- a/ggml-metal.m +++ b/ggml-metal.m @@ -126,13 +126,22 @@ void ggml_metal_log_set_callback(void (*log_callback)(enum llama_log_level level ggml_metal_log_user_data = user_data; } -static void ggml_metal_log(enum llama_log_level level, const char* format, ...) { +static void ggml_metal_log(enum llama_log_level level, const char* format, ...){ if ( ggml_metal_log_callback != NULL ) { - va_list arg; - va_start(arg, format); - char const* text = va_arg(arg, char const*); - ggml_metal_log_callback(level, text, ggml_metal_log_user_data); - va_end(arg); + va_list args; + va_start(args, format); + char buffer[128]; + int len = vsnprintf(buffer, 128, format, args); + if (len < 128) { + ggml_metal_log_callback(level, buffer, ggml_metal_log_user_data); + } else { + char* buffer2 = malloc(len+1); + vsnprintf(buffer2, len+1, format, args); + buffer2[len] = 0; + ggml_metal_log_callback(level, buffer2, ggml_metal_log_user_data); + free(buffer2); + } + va_end(args); } }