Antoine Poinsot
4 years ago
committed by
Christian Decker
3 changed files with 67 additions and 6 deletions
@ -0,0 +1,61 @@ |
|||
#include <assert.h> |
|||
#include <stdint.h> |
|||
#include <tests/fuzz/libfuzz.h> |
|||
|
|||
#include <ccan/tal/tal.h> |
|||
#include <common/amount.h> |
|||
#include <common/utils.h> |
|||
|
|||
void init(int *argc, char ***argv) |
|||
{ |
|||
} |
|||
|
|||
void run(const uint8_t *data, size_t size) |
|||
{ |
|||
struct amount_msat msat; |
|||
struct amount_sat sat; |
|||
char *string; |
|||
uint8_t *buf; |
|||
const char *fmt_msat, *fmt_msatbtc, *fmt_sat, *fmt_satbtc; |
|||
|
|||
|
|||
/* We should not crash when parsing any string. */ |
|||
|
|||
string = tal_arr(NULL, char, size); |
|||
for (size_t i = 0; i < size; i++) |
|||
string[i] = (char) data[i] % (CHAR_MAX + 1); |
|||
|
|||
parse_amount_msat(&msat, string, tal_count(string)); |
|||
parse_amount_sat(&sat, string, tal_count(string)); |
|||
tal_free(string); |
|||
|
|||
|
|||
/* Same with the wire primitives. */ |
|||
|
|||
buf = tal_arr(NULL, uint8_t, 8); |
|||
|
|||
msat = fromwire_amount_msat(&data, &size); |
|||
towire_amount_msat(&buf, msat); |
|||
sat = fromwire_amount_sat(&data, &size); |
|||
towire_amount_sat(&buf, sat); |
|||
|
|||
tal_free(buf); |
|||
|
|||
|
|||
/* Format should inconditionally produce valid amount strings according to our
|
|||
* parser */ |
|||
|
|||
fmt_msat = fmt_amount_msat(NULL, &msat); |
|||
fmt_msatbtc = fmt_amount_msat_btc(NULL, &msat, true); |
|||
assert(parse_amount_msat(&msat, fmt_msat, tal_count(fmt_msat))); |
|||
assert(parse_amount_msat(&msat, fmt_msatbtc, tal_count(fmt_msatbtc))); |
|||
tal_free(fmt_msat); |
|||
tal_free(fmt_msatbtc); |
|||
|
|||
fmt_sat = fmt_amount_sat(NULL, &sat); |
|||
fmt_satbtc = fmt_amount_sat_btc(NULL, &sat, true); |
|||
assert(parse_amount_sat(&sat, fmt_sat, tal_count(fmt_sat))); |
|||
assert(parse_amount_sat(&sat, fmt_satbtc, tal_count(fmt_satbtc))); |
|||
tal_free(fmt_sat); |
|||
tal_free(fmt_satbtc); |
|||
} |
Loading…
Reference in new issue