[PATCH] log: improve handling of use-before-init

Matt Hoosier matt.hoosier at gmail.com
Fri May 4 14:26:34 UTC 2018


Rather than segfaulting by attempting to traverse an initially
null log handler pointer, explicitly print a message and abort.

Signed-off-by: Matt Hoosier <matt.hoosier at gmail.com>
---
 libweston/log.c | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/libweston/log.c b/libweston/log.c
index 7d99a95d..c21f25e9 100644
--- a/libweston/log.c
+++ b/libweston/log.c
@@ -36,8 +36,26 @@
 
 #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
  *
-- 
2.13.6



More information about the wayland-devel mailing list