commit 6105080: [Minor] Css: Use old good strtod that does not throw exceptions

Vsevolod Stakhov vsevolod at highsecure.ru
Thu May 6 10:35:05 UTC 2021


Author: Vsevolod Stakhov
Date: 2021-05-06 11:31:57 +0100
URL: https://github.com/rspamd/rspamd/commit/6105080a1ee8adec47f4dd0a8365ff9125b8c2ee (HEAD -> master)

[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<css_parser_token::token_type::number_token>(num);


More information about the Commits mailing list