Skip to content

Commit a989019

Browse files
committed
fix(runner): add error handling for stoll/stod in parseParam
1 parent c16cb78 commit a989019

1 file changed

Lines changed: 20 additions & 4 deletions

File tree

tools/warpforth-runner/warpforth-runner.cpp

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,24 @@ static Param parseParam(std::string_view s) {
157157
return vals;
158158
};
159159

160-
auto toI64 = [](const std::string &s) -> int64_t { return std::stoll(s); };
161-
auto toF64 = [](const std::string &s) -> double { return std::stod(s); };
160+
auto toI64 = [&](const std::string &tok) -> int64_t {
161+
try {
162+
return std::stoll(tok);
163+
} catch (const std::exception &) {
164+
std::cerr << "Error: invalid integer value '" << tok << "' in --param "
165+
<< s << "\n";
166+
exit(1);
167+
}
168+
};
169+
auto toF64 = [&](const std::string &tok) -> double {
170+
try {
171+
return std::stod(tok);
172+
} catch (const std::exception &) {
173+
std::cerr << "Error: invalid float value '" << tok << "' in --param " << s
174+
<< "\n";
175+
exit(1);
176+
}
177+
};
162178

163179
if (typePrefix == "i64[]")
164180
return Param{ArrayParam<int64_t>{parseValues(toI64)}};
@@ -173,9 +189,9 @@ static Param parseParam(std::string_view s) {
173189
}
174190

175191
if (typePrefix == "i64")
176-
return Param{ScalarParam<int64_t>{std::stoll(valueStr)}};
192+
return Param{ScalarParam<int64_t>{toI64(valueStr)}};
177193
if (typePrefix == "f64")
178-
return Param{ScalarParam<double>{std::stod(valueStr)}};
194+
return Param{ScalarParam<double>{toF64(valueStr)}};
179195

180196
std::cerr << "Error: unsupported param type '" << typePrefix
181197
<< "' (expected i64, i64[], f64, or f64[]), got: " << s << "\n";

0 commit comments

Comments
 (0)