Browse Source

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.
json-streaming
Christian Decker 7 years ago
committed by Rusty Russell
parent
commit
cf52b7161f
  1. 2
      lightningd/gossip_control.c
  2. 7
      lightningd/json.c
  3. 4
      lightningd/test/run-param.c

2
lightningd/gossip_control.c

@ -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);

7
lightningd/json.c

@ -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;
}

4
lightningd/test/run-param.c

@ -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);
}

Loading…
Cancel
Save