aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/log.cc
diff options
context:
space:
mode:
authorZachary Snow <zach@zachjs.com>2021-02-23 20:39:13 -0500
committerZachary Snow <zach@zachjs.com>2021-02-23 20:49:21 -0500
commit5e439b6e3fdb498c821cccfed456547e9568f47b (patch)
tree0b559fe4e7a2a3ce384afa42e77005ff1d231423 /kernel/log.cc
parentb05b98521c781fef0f9d900a53310cad9e1434b0 (diff)
downloadyosys-5e439b6e3fdb498c821cccfed456547e9568f47b.tar.gz
yosys-5e439b6e3fdb498c821cccfed456547e9568f47b.tar.bz2
yosys-5e439b6e3fdb498c821cccfed456547e9568f47b.zip
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.
Diffstat (limited to 'kernel/log.cc')
-rw-r--r--kernel/log.cc6
1 files 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