Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 6651741

Browse files
committed
trying from_chars for double (stod)
1 parent cec93e4 commit 6651741

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

‎.vscode/settings.json‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"files.associations": {
3+
"string": "cpp",
4+
"charconv": "cpp"
5+
}
6+
}

‎src/actions/rule_id.cc‎

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include <iostream>
1919
#include <string>
20+
#include <charconv>
2021

2122
#include "modsecurity/transaction.h"
2223
#include "modsecurity/rule.h"
@@ -28,15 +29,25 @@ namespace actions {
2829
bool RuleId::init(std::string *error) {
2930
std::string a = m_parser_payload;
3031

31-
try {
32-
m_ruleId = std::stod(a);
33-
} catch (...) {
32+
const auto format = std::chars_format::fixed;
33+
const auto conv_res = std::from_chars(a.data(), a.data() + a.size(), m_ruleId, format);
34+
if (conv_res.ec == std::errc::invalid_argument || conv_res.ec == std::errc::result_out_of_range) {
35+
// Conversion error
3436
m_ruleId = 0;
3537
error->assign("The input \"" + a + "\" does not " \
3638
"seems to be a valid rule id.");
3739
return false;
3840
}
3941

42+
// try {
43+
// m_ruleId = std::stod(a);
44+
// } catch (...) {
45+
// m_ruleId = 0;
46+
// error->assign("The input \"" + a + "\" does not " \
47+
// "seems to be a valid rule id.");
48+
// return false;
49+
// }
50+
4051
std::ostringstream oss;
4152
oss << std::setprecision(40) << m_ruleId;
4253
if (a != oss.str() || m_ruleId < 0) {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /