From 5e439b6e3fdb498c821cccfed456547e9568f47b Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Tue, 23 Feb 2021 20:39:13 -0500 Subject: [PATCH] Fix double-free on unmatched logger error pattern When an expected logger error pattern is unmatched, the logger raises another (hidden) error. Because of the previous ordering of actions, `logv_error_with_prefix()` would inadvertently invoke `yosys_atexit()` twice, causing a double-free. --- kernel/log.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel/log.cc b/kernel/log.cc index c7ae873bc..41e91119e 100644 --- a/kernel/log.cc +++ b/kernel/log.cc @@ -345,9 +345,6 @@ static void logv_error_with_prefix(const char *prefix, log_make_debug = bak_log_make_debug; - if (log_error_atexit) - log_error_atexit(); - for (auto &item : log_expect_error) if (YS_REGEX_NS::regex_search(log_last_error, item.second.pattern)) item.second.current_count++; @@ -355,6 +352,9 @@ static void logv_error_with_prefix(const char *prefix, if (check_expected_logs) log_check_expected(); + if (log_error_atexit) + log_error_atexit(); + YS_DEBUGTRAP_IF_DEBUGGING; #ifdef EMSCRIPTEN -- 2.30.2