if (val.is_number()) {
return val.int_value();
} else if (val.is_string()) {
- return std::stoi(val.string_value());
+ try {
+ return std::stoi(val.string_value());
+ } catch (std::out_of_range&) {
+ throw JsonException("Value for key '" + string(key) + "' is out of range");
+ }
} else {
// TODO: check if value really isn't present
return default_value;
if (val.is_number()) {
return val.number_value();
} else if (val.is_string()) {
- return std::stod(val.string_value());
+ try {
+ return std::stod(val.string_value());
+ } catch (std::out_of_range&) {
+ throw JsonException("Value for key '" + string(key) + "' is out of range");
+ }
} else {
throw JsonException("Key '" + string(key) + "' not an Integer or not present");
}
self.assertNotEquals(serverset['records'], [])
self.assertEquals(serverset['comments'], [])
+ def test_zone_comment_out_of_range_modified_at(self):
+ # Test if comments on an rrset stay intact if the rrset is replaced
+ name, payload, zone = self.create_zone()
+ rrset = {
+ 'changetype': 'replace',
+ 'name': name,
+ 'type': 'NS',
+ 'comments': [
+ {
+ 'account': 'test1',
+ 'content': 'oh hi there',
+ 'modified_at': '4294967297'
+ }
+ ]
+ }
+ payload = {'rrsets': [rrset]}
+ r = self.session.patch(
+ self.url("/api/v1/servers/localhost/zones/" + name),
+ data=json.dumps(payload),
+ headers={'content-type': 'application/json'})
+ self.assertEquals(r.status_code, 422)
+ self.assertIn("Value for key 'modified_at' is out of range", r.json()['error'])
+
def test_zone_comment_stay_intact(self):
# Test if comments on an rrset stay intact if the rrset is replaced
name, payload, zone = self.create_zone()