Extract ParseDescriptorRange

So as to be consistently informative when the checks fail, and
to protect against unintentional divergence among the checks.
This commit is contained in:
Ben Woosley
2019-04-04 00:39:04 -07:00
parent ba54342c9d
commit 510c6532ba
7 changed files with 48 additions and 23 deletions

View File

@@ -23,6 +23,7 @@
#include <warnings.h>
#include <stdint.h>
#include <tuple>
#ifdef HAVE_MALLOC_INFO
#include <malloc.h>
#endif
@@ -214,18 +215,7 @@ UniValue deriveaddresses(const JSONRPCRequest& request)
int64_t range_end = 0;
if (request.params.size() >= 2 && !request.params[1].isNull()) {
auto range = ParseRange(request.params[1]);
if (range.first < 0) {
throw JSONRPCError(RPC_INVALID_PARAMETER, "Range should be greater or equal than 0");
}
if ((range.second >> 31) != 0) {
throw JSONRPCError(RPC_INVALID_PARAMETER, "End of range is too high");
}
if (range.second >= range.first + 1000000) {
throw JSONRPCError(RPC_INVALID_PARAMETER, "Range is too large");
}
range_begin = range.first;
range_end = range.second;
std::tie(range_begin, range_end) = ParseDescriptorRange(request.params[1]);
}
FlatSigningProvider provider;