aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/json-to-value.cc
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2017-12-14 19:09:45 -0500
committerBen Gamari <ben@smart-cactus.org>2017-12-14 19:09:45 -0500
commitf9bcbddef260872878708317e9f5fa78cd0fe849 (patch)
treed15bf37daeb104229f4ecc6934cf9dffdce390bb /src/libexpr/json-to-value.cc
parent5d5b931fb178046ba286b8ef2b56a00b3a85c51c (diff)
json-to-value: Throw sensible error message on invalid numbers
Diffstat (limited to 'src/libexpr/json-to-value.cc')
-rw-r--r--src/libexpr/json-to-value.cc14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/libexpr/json-to-value.cc b/src/libexpr/json-to-value.cc
index 9380de3a6..8b1404595 100644
--- a/src/libexpr/json-to-value.cc
+++ b/src/libexpr/json-to-value.cc
@@ -106,10 +106,16 @@ static void parseJSON(EvalState & state, const char * & s, Value & v)
tmp_number += *s++;
}
- if (number_type == tFloat)
- mkFloat(v, stod(tmp_number));
- else
- mkInt(v, stoi(tmp_number));
+ try {
+ if (number_type == tFloat)
+ mkFloat(v, stod(tmp_number));
+ else
+ mkInt(v, stoi(tmp_number));
+ } catch (std::invalid_argument e) {
+ throw JSONParseError("invalid JSON number");
+ } catch (std::out_of_range e) {
+ throw JSONParseError("out-of-range JSON number");
+ }
}
else if (strncmp(s, "true", 4) == 0) {