diff --git a/plugins/builtin/source/content/views/view_find.cpp b/plugins/builtin/source/content/views/view_find.cpp index c26c13a31..1934635c1 100644 --- a/plugins/builtin/source/content/views/view_find.cpp +++ b/plugins/builtin/source/content/views/view_find.cpp @@ -156,9 +156,21 @@ namespace hex::plugin::builtin { static std::tuple, size_t> parseNumericValue(const std::string &string) { static_assert(sizeof(StorageType) >= sizeof(Type)); - StorageType value = 0x00; - auto result = std::from_chars(string.data(), string.data() + string.size(), value); - if (result.ec != std::errc() || result.ptr != string.data() + string.size()) + StorageType value; + + std::size_t processed = 0; + try { + if constexpr (std::floating_point) + value = std::stod(string, &processed); + else if constexpr (std::signed_integral) + value = std::stoll(string, &processed, 0); + else + value = std::stoull(string, &processed, 0); + } catch (std::exception &) { + return { false, { }, 0 }; + } + + if (processed != string.size()) return { false, { }, 0 }; if (value < std::numeric_limits::lowest() || value > std::numeric_limits::max()) @@ -709,7 +721,7 @@ namespace hex::plugin::builtin { if (edited) { auto [minValid, min, minSize] = parseNumericValueInput(settings.inputMin, settings.type); - auto [maxValid, max, maxSize] = parseNumericValueInput(settings.inputMin, settings.type); + auto [maxValid, max, maxSize] = parseNumericValueInput(settings.inputMax, settings.type); this->m_settingsValid = minValid && maxValid && minSize == maxSize; }