json-rpc: Remove upper limit for percentage

The `json_tok_percentage` parser is used for the `fuzzpercent` in `getroute` and
`maxfeepercent` in `pay`. In both cases it seems reasonable to allow values
larger than 100%. This has bitten users in the past when they transferred single
satoshis to things like satoshis.place over a route longer than 2 hops.
This commit is contained in:
Christian Decker
2018-09-17 03:45:01 +02:00
committed by Rusty Russell
parent 60b51d29b6
commit cf52b7161f
3 changed files with 6 additions and 7 deletions

View File

@@ -327,7 +327,7 @@ static const struct json_command getroute_command = {
json_getroute,
"Show route to {id} for {msatoshi}, using {riskfactor} and optional {cltv} (default 9). "
"If specified search from {fromid} otherwise use this node as source. "
"Randomize the route with up to {fuzzpercent} (0.0 -> 100.0, default 5.0) "
"Randomize the route with up to {fuzzpercent} (default 5.0) "
"using {seed} as an arbitrary-size string seed."
};
AUTODATA(json_command, &getroute_command);

View File

@@ -238,12 +238,11 @@ bool json_tok_percent(struct command *cmd, const char *name,
double **num)
{
*num = tal(cmd, double);
if (json_to_double(buffer, tok, *num))
if (**num >= 0.0 && **num <= 100.0)
return true;
if (json_to_double(buffer, tok, *num) && **num >= 0.0)
return true;
command_fail(cmd, JSONRPC2_INVALID_PARAMS,
"'%s' should be a double in range [0.0, 100.0], not '%.*s'",
"'%s' should be a positive double, not '%.*s'",
name, tok->end - tok->start, buffer + tok->start);
return false;
}

View File

@@ -502,8 +502,8 @@ static void json_tok_tests(void)
test_cb(json_tok_percent, double, "[ 1.01 ]", 1.01, true);
test_cb(json_tok_percent, double, "[ 99.99 ]", 99.99, true);
test_cb(json_tok_percent, double, "[ 100.0 ]", 100, true);
test_cb(json_tok_percent, double, "[ 100.001 ]", 0, false);
test_cb(json_tok_percent, double, "[ 1000 ]", 0, false);
test_cb(json_tok_percent, double, "[ 100.001 ]", 100.001, true);
test_cb(json_tok_percent, double, "[ 1000 ]", 1000, true);
test_cb(json_tok_percent, double, "[ 'wow' ]", 0, false);
}