MCPcopy Create free account
hub / github.com/ElementsProject/lightning / run

Function run

tests/fuzz/fuzz-bech32.c:13–54  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

11}
12
13void run(const uint8_t *data, size_t size)
14{
15 const char hrp_inv[5] = "lnbc\0", hrp_addr[3] = "bc\0";
16 char *bech32_str, *hrp_out, *addr;
17 uint8_t *data_out;
18 size_t data_out_len;
19 int wit_version;
20 bech32_encoding benc;
21
22 /* Buffer size is defined in each function's doc comment. */
23 bech32_str = malloc(size + strlen(hrp_inv) + 8);
24 benc = data[0] ? BECH32_ENCODING_BECH32 : BECH32_ENCODING_BECH32M;
25 /* FIXME: needs a dictionary / a startup seed corpus to pass this more
26 * frequently. */
27 if (bech32_encode(bech32_str, hrp_inv, data+1, size-1, size-1, benc) == 1) {
28 hrp_out = malloc(strlen(bech32_str) - 6);
29 data_out = malloc(strlen(bech32_str) - 8);
30 assert(bech32_decode(hrp_out, data_out, &data_out_len, bech32_str, size) == benc);
31 free(hrp_out);
32 free(data_out);
33 }
34 free(bech32_str);
35
36 data_out = malloc(size);
37
38 /* This is also used as part of sign and check message. */
39 data_out_len = 0;
40 bech32_convert_bits(data_out, &data_out_len, 8, data, size, 5, 1);
41 data_out_len = 0;
42 bech32_convert_bits(data_out, &data_out_len, 8, data, size, 5, 0);
43
44 addr = malloc(73 + strlen(hrp_addr));
45 wit_version = 0;
46 if (segwit_addr_encode(addr, hrp_addr, wit_version, data, size) == 1)
47 segwit_addr_decode(&wit_version, data_out, &data_out_len, hrp_addr, addr);
48 wit_version = 1;
49 if (segwit_addr_encode(addr, hrp_addr, wit_version, data, size) == 1)
50 segwit_addr_decode(&wit_version, data_out, &data_out_len, hrp_addr, addr);
51 free(addr);
52
53 free(data_out);
54}

Callers

nothing calls this directly

Calls 5

bech32_convert_bitsFunction · 0.85
segwit_addr_encodeFunction · 0.85
bech32_encodeFunction · 0.50
bech32_decodeFunction · 0.50
segwit_addr_decodeFunction · 0.50

Tested by

no test coverage detected