aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr
diff options
context:
space:
mode:
Diffstat (limited to 'src/libexpr')
-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) {