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);
 }