From 5a63ca47284e54851f497a930e854a22fab07e04 Mon Sep 17 00:00:00 2001 From: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> Date: Sat, 12 Oct 2024 14:48:52 +0800 Subject: [PATCH 01/10] Fix `fnlen` may be used uninitialized Signed-off-by: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> --- src/abi.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/abi.c b/src/abi.c index a030dba..ecdb895 100644 --- a/src/abi.c +++ b/src/abi.c @@ -326,8 +326,7 @@ int eth_abi_call(struct eth_abi *abi, char **fn, int *len) { cframebuf = abi->cframe->buf; if (abi->m == ETH_ABI_ENCODE) { - if (len == NULL) - fnlen = strlen(*fn); + fnlen = len ? *len : strlen(*fn); if (eth_keccak256(keccak, (uint8_t*)*fn, fnlen) < 0) return -1; From 3c17fed04b9374ff6b82846bb943233009ed1339 Mon Sep 17 00:00:00 2001 From: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> Date: Sat, 12 Oct 2024 15:06:27 +0800 Subject: [PATCH 02/10] Fix `bloom3` used before initialized Signed-off-by: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> --- test/test-eth-bloom.c | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test-eth-bloom.c b/test/test-eth-bloom.c index c7bdd18..bba7942 100644 --- a/test/test-eth-bloom.c +++ b/test/test-eth-bloom.c @@ -35,6 +35,7 @@ void test_eth_bloom_or(void) { eth_bloom_from_bytes(&bloom1, address, 20); eth_bloom_from_bytes(&bloom2, topic, 32); + eth_bloom_init(&bloom3); eth_bloom_or(&bloom3, &bloom1); eth_bloom_or(&bloom3, &bloom2); From 8729e794cace9370387191edeb5e75f50169cad8 Mon Sep 17 00:00:00 2001 From: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> Date: Sat, 12 Oct 2024 15:11:43 +0800 Subject: [PATCH 03/10] Fix memory leakage for failed to free `cframe` Signed-off-by: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> --- src/rlp.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/rlp.c b/src/rlp.c index 05aec13..f0f9658 100644 --- a/src/rlp.c +++ b/src/rlp.c @@ -579,5 +579,6 @@ int eth_rlp_free(struct eth_rlp *dest) { cframe = dest->cframe; free(cframe->buf); + free(cframe); return 1; } From 73d0c2fd9f53cbbe8eff10d5bd97a131df32a16c Mon Sep 17 00:00:00 2001 From: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> Date: Sat, 12 Oct 2024 15:17:28 +0800 Subject: [PATCH 04/10] Fix memory leakage in `eth_rlp_from_hex` Signed-off-by: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> --- src/rlp.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/rlp.c b/src/rlp.c index f0f9658..81d1134 100644 --- a/src/rlp.c +++ b/src/rlp.c @@ -563,11 +563,14 @@ int eth_rlp_from_hex(struct eth_rlp *dest, char *hex, int len) { if ((sbuf = eth_hex_to_bytes(&buf, hex, len)) <= 0) return -1; - if (eth_rlp_frame_init(&nframe, buf, sbuf) <= 0) + if (eth_rlp_frame_init(&nframe, buf, sbuf) <= 0) { + free(buf); return -1; + } dest->cframe = nframe; dest->m = ETH_RLP_DECODE; + free(buf); return 1; } From 578b67fd9cc5507df4bd6d4aacf5cb790c8179f2 Mon Sep 17 00:00:00 2001 From: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> Date: Sat, 12 Oct 2024 15:18:54 +0800 Subject: [PATCH 05/10] Fix memory leak in `test_eth_rlp_to_bytes` Signed-off-by: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> --- test/test-eth-rlp.c | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test-eth-rlp.c b/test/test-eth-rlp.c index 139fc02..f9ce411 100644 --- a/test/test-eth-rlp.c +++ b/test/test-eth-rlp.c @@ -246,6 +246,7 @@ void test_eth_rlp_to_bytes(void) { ok(eth_rlp_free(&rlp0) == 1); cmp_mem(bout, bytes, boutlen); ok(boutlen == 3); + free(bout); } void test_eth_rlp_decode_eip1559_tx(void) { From c53241f7af17de82e9bd8167eef2e924d4ca4a36 Mon Sep 17 00:00:00 2001 From: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> Date: Sat, 12 Oct 2024 15:35:56 +0800 Subject: [PATCH 06/10] Fix memory leak in `eth_abi_from_hex` Signed-off-by: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> --- src/abi.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/abi.c b/src/abi.c index ecdb895..8729394 100644 --- a/src/abi.c +++ b/src/abi.c @@ -774,6 +774,11 @@ int eth_abi_from_hex(struct eth_abi *abi, char *hex, int len) { if (ethc_abi_frame_init(&nframe) < 0) return -1; + if (nframe->buf->buf != NULL) { + free(nframe->buf->buf); + nframe->buf->buf = NULL; + } + if ((len = eth_hex_to_bytes(&(nframe->buf->buf), hex, len)) < 0) return -1; From 4d0b39cf4c0a333780b7929a6799fcd6ab21b067 Mon Sep 17 00:00:00 2001 From: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> Date: Sat, 12 Oct 2024 15:38:46 +0800 Subject: [PATCH 07/10] Fix wrong object free'd in `test_eth_abi_bytes32` Signed-off-by: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> --- test/test-eth-abi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test-eth-abi.c b/test/test-eth-abi.c index 7ebfd5d..22088dd 100644 --- a/test/test-eth-abi.c +++ b/test/test-eth-abi.c @@ -336,7 +336,7 @@ void test_eth_abi_bytes32() { ok(eth_abi_from_hex(&abi1, "f507a54fef38fbd2718fff5f6b54a65d57b079df170b0cd7985d9ce699c031c3", -1) == 1); ok(eth_abi_bytes32(&abi1, b1) == 1); - ok(eth_abi_free(&abi0) == 1); + ok(eth_abi_free(&abi1) == 1); cmp_mem(b1, b0, 32); } From b8ba46584c36ded5d5b46d49a7fb0b1e2dea2c44 Mon Sep 17 00:00:00 2001 From: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> Date: Sat, 12 Oct 2024 16:02:12 +0800 Subject: [PATCH 08/10] Fix memory leak in `eth_abi_address` Signed-off-by: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> --- src/abi.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/abi.c b/src/abi.c index 8729394..9ba0a1f 100644 --- a/src/abi.c +++ b/src/abi.c @@ -302,6 +302,7 @@ int eth_abi_address(struct eth_abi *abi, char **addr) { memcpy(&(cframebuf->buf[cframebuf->offset + 12]), tmp, 20); cframebuf->offset += ETH_ABI_WORD_SIZE; cframebuf->len += ETH_ABI_WORD_SIZE; + free(tmp); return 1; } From 97552d90ec49d1cb2ff004aa9fb85629266bebbb Mon Sep 17 00:00:00 2001 From: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> Date: Sat, 12 Oct 2024 16:05:23 +0800 Subject: [PATCH 09/10] Fix memory leak in `test_eth_abi_mpint` Signed-off-by: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> --- test/test-eth-abi.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/test-eth-abi.c b/test/test-eth-abi.c index 22088dd..a12a25e 100644 --- a/test/test-eth-abi.c +++ b/test/test-eth-abi.c @@ -256,6 +256,7 @@ void test_eth_abi_mpint(void) { ok(eth_abi_mpint(&abi0, mpz1) == 1); ok(eth_abi_mpint(&abi0, mpz2) == 1); ok(eth_abi_to_hex(&abi0, &hex, &hexlen) == 1); + ok(eth_abi_free(&abi0) == 1); is(hex, "00000000000000000000000000000000000000000000000000000000000000ff" "0000000000000000000000000000000000000000000000000000000000000fff" @@ -268,6 +269,7 @@ void test_eth_abi_mpint(void) { mpz_init_set_str(mpz0, "0x0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff", 0); mpz_init(mpz1); ok(eth_abi_mpint(&abi1, mpz1) == 1); + ok(eth_abi_free(&abi1) == 1); ok(mpz_cmp(mpz0, mpz1) == 0); mpz_clears(mpz0, mpz1, NULL); } From d47994f38c0c9dc3a144888ce7cebb7376b52fbd Mon Sep 17 00:00:00 2001 From: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> Date: Sat, 12 Oct 2024 16:11:10 +0800 Subject: [PATCH 10/10] Fix memory leak in test_eth_rlp_decode_eip1559_tx Signed-off-by: Shen Jiamin <shen_jiamin@comp.nus.edu.sg> --- test/test-eth-rlp.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/test-eth-rlp.c b/test/test-eth-rlp.c index f9ce411..0f8b752 100644 --- a/test/test-eth-rlp.c +++ b/test/test-eth-rlp.c @@ -293,6 +293,7 @@ void test_eth_rlp_decode_eip1559_tx(void) { ok(eth_rlp_hex(&rlp, &r, NULL)); ok(eth_rlp_hex(&rlp, &s, NULL)); ok(eth_rlp_array_end(&rlp)); + ok(eth_rlp_free(&rlp) == 1); // check is(chain_id_hex, "aa36a7"); @@ -309,4 +310,13 @@ void test_eth_rlp_decode_eip1559_tx(void) { ok(v == 1); is(r, "99c06b4f79b805ae7be2dcd21191e470362c9d66b7cfea90b185015893a1477e"); is(s, "3c16ce20c94c5ee0598154007a67fae010769fe3db29a1e40ac9532a91835a0c"); + + free(chain_id_hex); + free(max_priority_fee_per_gas); + free(max_fee_per_gas); + free(gas_limit); + free(to_addr); + free(abi_hex); + free(r); + free(s); }