diff options
author | Zachary Snow <zach@zachjs.com> | 2021-02-23 20:39:13 -0500 |
---|---|---|
committer | Zachary Snow <zach@zachjs.com> | 2021-02-23 20:49:21 -0500 |
commit | 5e439b6e3fdb498c821cccfed456547e9568f47b (patch) | |
tree | 0b559fe4e7a2a3ce384afa42e77005ff1d231423 /kernel | |
parent | b05b98521c781fef0f9d900a53310cad9e1434b0 (diff) | |
download | yosys-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')
-rw-r--r-- | kernel/log.cc | 6 |
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 |