Avoid a possible infinite recursion in options parsing.

See microsoft/mimalloc#502, second issue, for a scenario where this occurs.
This commit is contained in:
Frank Richter 2021-12-19 15:46:46 +01:00
parent 0560fc27c0
commit 5d92b5f6d3

View File

@ -532,8 +532,11 @@ static void mi_option_init(mi_option_desc_t* desc) {
desc->init = INITIALIZED; desc->init = INITIALIZED;
} }
else { else {
_mi_warning_message("environment option mimalloc_%s has an invalid value: %s\n", desc->name, buf); /* _mi_warning_message() will itself call mi_option_get() for some options,
* so to avoid a possible infinite recursion it's important to mark the option as
* "initialized" first */
desc->init = DEFAULTED; desc->init = DEFAULTED;
_mi_warning_message("environment option mimalloc_%s has an invalid value: %s\n", desc->name, buf);
} }
} }
mi_assert_internal(desc->init != UNINIT); mi_assert_internal(desc->init != UNINIT);