From e53ab845aaf4343bb098a2bb0b8e0c4a0661a989 Mon Sep 17 00:00:00 2001 From: "Wu, Yingcong" Date: Wed, 4 Sep 2024 22:26:40 -0700 Subject: [PATCH 1/3] add catch and update error message --- .../loader/layers/sanitizer/asan_options.hpp | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/source/loader/layers/sanitizer/asan_options.hpp b/source/loader/layers/sanitizer/asan_options.hpp index 298639b73c..6e962d97d5 100644 --- a/source/loader/layers/sanitizer/asan_options.hpp +++ b/source/loader/layers/sanitizer/asan_options.hpp @@ -42,7 +42,14 @@ struct AsanOptions { private: AsanOptions(logger::Logger &logger) { - auto OptionsEnvMap = getenv_to_map("UR_LAYER_ASAN_OPTIONS"); + std::optional OptionsEnvMap; + try { + OptionsEnvMap = getenv_to_map("UR_LAYER_ASAN_OPTIONS"); + } catch (const std::invalid_argument &e) { + logger.error(e.what()); + die("Sanitizer failed to parse options.\n"); + } + if (!OptionsEnvMap.has_value()) { return; } @@ -74,8 +81,8 @@ struct AsanOptions { Opt = false; } else { std::stringstream SS; - SS << "[ERROR]: \"" << Name << "\" is set to \"" - << Value << "\", which is not an valid setting. "; + SS << "\"" << Name << "\" is set to \"" << Value + << "\", which is not an valid setting. "; SS << "Acceptable input are: for enable, use:"; for (auto &S : TrueStrings) { SS << " \"" << S << "\""; @@ -86,7 +93,8 @@ struct AsanOptions { SS << " \"" << S << "\""; } SS << "."; - die(SS.str().c_str()); + logger.error(SS.str().c_str()); + die("Sanitizer failed to parse options.\n"); } } }; @@ -106,9 +114,10 @@ struct AsanOptions { } MaxQuarantineSizeMB = temp_long; } catch (...) { - die("[ERROR]: \"quarantine_size_mb\" should be " - "an positive integer that smaller than or equal to " - "4294967295."); + logger.error("\"quarantine_size_mb\" should be " + "an integer in range[0, {}].", + UINT32_MAX); + die("Sanitizer failed to parse options.\n"); } } @@ -120,10 +129,11 @@ struct AsanOptions { if (MinRZSize < 16) { MinRZSize = 16; logger.warning("Trying to set redzone size to a " - "value less than 16 is ignored"); + "value less than 16 is ignored."); } } catch (...) { - die("[ERROR]: \"redzone\" should be an integer"); + logger.error("\"redzone\" should be an integer in range[0, 16]."); + die("Sanitizer failed to parse options.\n"); } } @@ -135,10 +145,12 @@ struct AsanOptions { if (MaxRZSize > 2048) { MaxRZSize = 2048; logger.warning("Trying to set max redzone size to a " - "value greater than 2048 is ignored"); + "value greater than 2048 is ignored."); } } catch (...) { - die("[ERROR]: \"max_redzone\" should be an integer"); + logger.error( + "\"max_redzone\" should be an integer in range[0, 2048]."); + die("Sanitizer failed to parse options.\n"); } } } From c893942a045c07109897e3644067f5e70ac1008a Mon Sep 17 00:00:00 2001 From: "Wu, Yingcong" Date: Wed, 4 Sep 2024 22:30:04 -0700 Subject: [PATCH 2/3] format --- source/loader/layers/sanitizer/asan_options.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/loader/layers/sanitizer/asan_options.hpp b/source/loader/layers/sanitizer/asan_options.hpp index 6e962d97d5..cfb227ef1f 100644 --- a/source/loader/layers/sanitizer/asan_options.hpp +++ b/source/loader/layers/sanitizer/asan_options.hpp @@ -132,7 +132,8 @@ struct AsanOptions { "value less than 16 is ignored."); } } catch (...) { - logger.error("\"redzone\" should be an integer in range[0, 16]."); + logger.error( + "\"redzone\" should be an integer in range[0, 16]."); die("Sanitizer failed to parse options.\n"); } } From f54a2215403b6928bbdc5b7449caa87d388a4efd Mon Sep 17 00:00:00 2001 From: "Wu, Yingcong" Date: Fri, 13 Sep 2024 05:17:03 +0200 Subject: [PATCH 3/3] use logger.always() --- source/loader/layers/sanitizer/asan_options.hpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/loader/layers/sanitizer/asan_options.hpp b/source/loader/layers/sanitizer/asan_options.hpp index cfb227ef1f..eb3f6bb03d 100644 --- a/source/loader/layers/sanitizer/asan_options.hpp +++ b/source/loader/layers/sanitizer/asan_options.hpp @@ -46,7 +46,10 @@ struct AsanOptions { try { OptionsEnvMap = getenv_to_map("UR_LAYER_ASAN_OPTIONS"); } catch (const std::invalid_argument &e) { - logger.error(e.what()); + std::stringstream SS; + SS << "[ERROR]: "; + SS << e.what(); + logger.always(SS.str().c_str()); die("Sanitizer failed to parse options.\n"); }