From: Zachary Snow Date: Wed, 24 Feb 2021 01:39:13 +0000 (-0500) Subject: Fix double-free on unmatched logger error pattern X-Git-Tag: working-ls180~38^2 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5e439b6e3fdb498c821cccfed456547e9568f47b;p=yosys.git 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. --- 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