From 6105080a1ee8adec47f4dd0a8365ff9125b8c2ee Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Thu, 6 May 2021 11:31:57 +0100 Subject: [PATCH] [Minor] Css: Use old good strtod that does not throw exceptions --- src/libserver/css/css_tokeniser.cxx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/libserver/css/css_tokeniser.cxx b/src/libserver/css/css_tokeniser.cxx index 0374193bf..f4180b761 100644 --- a/src/libserver/css/css_tokeniser.cxx +++ b/src/libserver/css/css_tokeniser.cxx @@ -364,8 +364,13 @@ auto css_tokeniser::consume_number() -> struct css_parser_token /* I wish it was supported properly */ //auto conv_res = std::from_chars(&input[offset], &input[i], num); - std::string numbuf{&input[offset], (i - offset)}; - num = std::stod(numbuf); + char numbuf[128], *endptr = NULL; + rspamd_strlcpy(numbuf, &input[offset], MIN(i - offset + 1, sizeof(numbuf))); + num = g_ascii_strtod(numbuf, &endptr); + + if (endptr && *endptr != '\0') { + msg_debug_css("invalid number: %s", numbuf); + } offset = i; auto ret = make_token(num); -- 2.39.5