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. 5
      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, json_getroute,
"Show route to {id} for {msatoshi}, using {riskfactor} and optional {cltv} (default 9). " "Show route to {id} for {msatoshi}, using {riskfactor} and optional {cltv} (default 9). "
"If specified search from {fromid} otherwise use this node as source. " "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." "using {seed} as an arbitrary-size string seed."
}; };
AUTODATA(json_command, &getroute_command); AUTODATA(json_command, &getroute_command);

5
lightningd/json.c

@ -238,12 +238,11 @@ bool json_tok_percent(struct command *cmd, const char *name,
double **num) double **num)
{ {
*num = tal(cmd, double); *num = tal(cmd, double);
if (json_to_double(buffer, tok, *num)) if (json_to_double(buffer, tok, *num) && **num >= 0.0)
if (**num >= 0.0 && **num <= 100.0)
return true; return true;
command_fail(cmd, JSONRPC2_INVALID_PARAMS, 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); name, tok->end - tok->start, buffer + tok->start);
return false; 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, "[ 1.01 ]", 1.01, true);
test_cb(json_tok_percent, double, "[ 99.99 ]", 99.99, 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.0 ]", 100, true);
test_cb(json_tok_percent, double, "[ 100.001 ]", 0, false); test_cb(json_tok_percent, double, "[ 100.001 ]", 100.001, true);
test_cb(json_tok_percent, double, "[ 1000 ]", 0, false); test_cb(json_tok_percent, double, "[ 1000 ]", 1000, true);
test_cb(json_tok_percent, double, "[ 'wow' ]", 0, false); test_cb(json_tok_percent, double, "[ 'wow' ]", 0, false);
} }

Loading…
Cancel
Save