From 74742e0525826f5f31b24a7a5444e6f88fc91f81 Mon Sep 17 00:00:00 2001 From: Matt Hoosier Date: Fri, 4 May 2018 09:26:34 -0500 Subject: [PATCH] log: improve handling of use-before-init Rather than segfaulting by attempting to traverse an initially null log handler pointer, explicitly print a message and abort. Signed-off-by: Matt Hoosier Reviewed-by: Ian Ray [Pekka: coding style fix] Signed-off-by: Pekka Paalanen --- libweston/log.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/libweston/log.c b/libweston/log.c index 7d99a95d..d9bdbf8c 100644 --- a/libweston/log.c +++ b/libweston/log.c @@ -36,8 +36,28 @@ #include "compositor.h" -static log_func_t log_handler = 0; -static log_func_t log_continue_handler = 0; +static int +default_log_handler(const char *fmt, va_list ap); + +static log_func_t log_handler = default_log_handler; +static log_func_t log_continue_handler = default_log_handler; + +/** Sentinel log message handler + * + * This function is used as the default handler for log messages. It + * exists only to issue a noisy reminder to the user that a real handler + * must be installed prior to issuing logging calls. The process is + * immediately aborted after the reminder is printed. + * + * \param fmt The format string. Ignored. + * \param va The variadic argument list. Ignored. + */ +static int +default_log_handler(const char *fmt, va_list ap) +{ + fprintf(stderr, "weston_log_set_handler() must be called before using of weston_log().\n"); + abort(); +} /** Install the log handler *