fuzz: check decoded values

Decoded values should match the original values before encoding.
This commit is contained in:
Matt Morehouse
2023-05-05 17:32:30 -05:00
committed by Rusty Russell
parent 255413377b
commit 7db1e06fb5

View File

@@ -17,7 +17,7 @@ void run(const uint8_t *data, size_t size)
uint8_t *data_out; uint8_t *data_out;
size_t data_out_len, bech32_str_cap; size_t data_out_len, bech32_str_cap;
int wit_version; int wit_version;
bech32_encoding benc; bech32_encoding benc, benc_decoded;
if (size < 1) if (size < 1)
return; return;
@@ -30,8 +30,14 @@ void run(const uint8_t *data, size_t size)
bech32_str_cap, benc) == 1) { bech32_str_cap, benc) == 1) {
hrp_out = malloc(strlen(bech32_str) - 6); hrp_out = malloc(strlen(bech32_str) - 6);
data_out = malloc(strlen(bech32_str) - 8); data_out = malloc(strlen(bech32_str) - 8);
assert(bech32_decode(hrp_out, data_out, &data_out_len,
bech32_str, bech32_str_cap) == benc); benc_decoded = bech32_decode(hrp_out, data_out, &data_out_len,
bech32_str, bech32_str_cap);
assert(benc_decoded == benc);
assert(strcmp(hrp_inv, hrp_out) == 0);
assert(data_out_len == size - 1);
assert(memcmp(data_out, data + 1, data_out_len) == 0);
free(hrp_out); free(hrp_out);
free(data_out); free(data_out);
} }
@@ -47,11 +53,22 @@ void run(const uint8_t *data, size_t size)
addr = malloc(73 + strlen(hrp_addr)); addr = malloc(73 + strlen(hrp_addr));
wit_version = 0; wit_version = 0;
if (segwit_addr_encode(addr, hrp_addr, wit_version, data, size) == 1) if (segwit_addr_encode(addr, hrp_addr, wit_version, data, size) == 1) {
segwit_addr_decode(&wit_version, data_out, &data_out_len, hrp_addr, addr); assert(segwit_addr_decode(&wit_version, data_out, &data_out_len,
hrp_addr, addr) == 1);
assert(wit_version == 0);
assert(data_out_len == size);
assert(memcmp(data_out, data, data_out_len) == 0);
}
wit_version = 1; wit_version = 1;
if (segwit_addr_encode(addr, hrp_addr, wit_version, data, size) == 1) if (segwit_addr_encode(addr, hrp_addr, wit_version, data, size) == 1) {
segwit_addr_decode(&wit_version, data_out, &data_out_len, hrp_addr, addr); assert(segwit_addr_decode(&wit_version, data_out, &data_out_len,
hrp_addr, addr) == 1);
assert(wit_version == 1);
assert(data_out_len == size);
assert(memcmp(data_out, data, data_out_len) == 0);
}
free(addr); free(addr);
free(data_out); free(data_out);