* [PATCH] reftable/writer: fix memory leak when `padded_write()` fails
@ 2025-05-10 3:50 Lidong Yan via GitGitGadget
2025-05-11 16:16 ` [PATCH v2] reftable/writer: fix memory leak if write fails Lidong Yan via GitGitGadget
0 siblings, 1 reply; 8+ messages in thread
From: Lidong Yan via GitGitGadget @ 2025-05-10 3:50 UTC (permalink / raw)
To: git; +Cc: Lidong Yan, Lidong Yan
From: Lidong Yan <502024330056@smail.nju.edu.cn>
In reftable/writer.c:padded_write(), if w->writer failed, zeroed
allocated in `reftable_calloc` will leak. w->writer could be
`reftable_write_data` in reftable/stack.c, and could fail due to
some write error. Simply add reftable_free(zeroed) will solve this
problem.
Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn>
---
reftable/writer: fix memory leak when padded_write() fails
In reftable/writer.c:padded_write(), if w->writer failed, zeroed
allocated in reftable_calloc will leak. w->writer could be
reftable_write_data in reftable/stack.c, and could fail due to some
write error. Simply add reftable_free(zeroed) will solve this problem.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1958%2Fbrandb97%2Ffix-reftable-padded-write-leak-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1958/brandb97/fix-reftable-padded-write-leak-v1
Pull-Request: https://github.com/git/git/pull/1958
reftable/writer.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/reftable/writer.c b/reftable/writer.c
index cb16f71be49..3ceb3742888 100644
--- a/reftable/writer.c
+++ b/reftable/writer.c
@@ -57,8 +57,10 @@ static int padded_write(struct reftable_writer *w, uint8_t *data, size_t len,
return -1;
n = w->write(w->write_arg, zeroed, w->pending_padding);
- if (n < 0)
+ if (n < 0) {
+ reftable_free(zeroed);
return n;
+ }
w->pending_padding = 0;
reftable_free(zeroed);
base-commit: 6f84262c44a89851c3ae5a6e4c1a9d06b2068d75
--
gitgitgadget
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2] reftable/writer: fix memory leak if write fails
2025-05-10 3:50 [PATCH] reftable/writer: fix memory leak when `padded_write()` fails Lidong Yan via GitGitGadget
@ 2025-05-11 16:16 ` Lidong Yan via GitGitGadget
2025-05-12 8:25 ` Patrick Steinhardt
2025-05-12 12:49 ` [PATCH v3 0/2] reftable/writer: fix memory leak when " Lidong Yan via GitGitGadget
0 siblings, 2 replies; 8+ messages in thread
From: Lidong Yan via GitGitGadget @ 2025-05-11 16:16 UTC (permalink / raw)
To: git; +Cc: Lidong Yan, Lidong Yan
From: Lidong Yan <502024330056@smail.nju.edu.cn>
In reftable/writer.c:padded_write(), if w->writer failed, zeroed
allocated in `reftable_calloc` will leak. w->writer could be
`reftable_write_data` in reftable/stack.c, and could fail due to
some write error. Simply add reftable_free(zeroed) will solve this
problem.
In reftable/writer.c:writer_index_hash(), if `reftable_buf_add` failed,
key allocated by `reftable_malloc` will not be insert into `obj_index_tree`
thus leaks. Simple add reftable_free(key) will solve this problem.
Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn>
---
reftable/writer: fix memory leak when padded_write() fails
In reftable/writer.c:padded_write(), if w->writer failed, zeroed
allocated in reftable_calloc will leak. w->writer could be
reftable_write_data in reftable/stack.c, and could fail due to some
write error. Simply add reftable_free(zeroed) will solve this problem.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1958%2Fbrandb97%2Ffix-reftable-padded-write-leak-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1958/brandb97/fix-reftable-padded-write-leak-v2
Pull-Request: https://github.com/git/git/pull/1958
Range-diff vs v1:
1: 2023d6791ef ! 1: 9329ae2d478 reftable/writer: fix memory leak when `padded_write()` fails
@@ Metadata
Author: Lidong Yan <502024330056@smail.nju.edu.cn>
## Commit message ##
- reftable/writer: fix memory leak when `padded_write()` fails
+ reftable/writer: fix memory leak if write fails
In reftable/writer.c:padded_write(), if w->writer failed, zeroed
allocated in `reftable_calloc` will leak. w->writer could be
@@ Commit message
some write error. Simply add reftable_free(zeroed) will solve this
problem.
+ In reftable/writer.c:writer_index_hash(), if `reftable_buf_add` failed,
+ key allocated by `reftable_malloc` will not be insert into `obj_index_tree`
+ thus leaks. Simple add reftable_free(key) will solve this problem.
+
Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn>
## reftable/writer.c ##
@@ reftable/writer.c: static int padded_write(struct reftable_writer *w, uint8_t *d
w->pending_padding = 0;
reftable_free(zeroed);
+@@ reftable/writer.c: static int writer_index_hash(struct reftable_writer *w, struct reftable_buf *has
+
+ reftable_buf_reset(&key->hash);
+ err = reftable_buf_add(&key->hash, hash->buf, hash->len);
+- if (err < 0)
++ if (err < 0) {
++ reftable_free(key);
+ return err;
++ }
+ tree_insert(&w->obj_index_tree, key,
+ &obj_index_tree_node_compare);
+ } else {
reftable/writer.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/reftable/writer.c b/reftable/writer.c
index cb16f71be49..3b4ebdd6dce 100644
--- a/reftable/writer.c
+++ b/reftable/writer.c
@@ -57,8 +57,10 @@ static int padded_write(struct reftable_writer *w, uint8_t *data, size_t len,
return -1;
n = w->write(w->write_arg, zeroed, w->pending_padding);
- if (n < 0)
+ if (n < 0) {
+ reftable_free(zeroed);
return n;
+ }
w->pending_padding = 0;
reftable_free(zeroed);
@@ -256,8 +258,10 @@ static int writer_index_hash(struct reftable_writer *w, struct reftable_buf *has
reftable_buf_reset(&key->hash);
err = reftable_buf_add(&key->hash, hash->buf, hash->len);
- if (err < 0)
+ if (err < 0) {
+ reftable_free(key);
return err;
+ }
tree_insert(&w->obj_index_tree, key,
&obj_index_tree_node_compare);
} else {
base-commit: 6f84262c44a89851c3ae5a6e4c1a9d06b2068d75
--
gitgitgadget
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2] reftable/writer: fix memory leak if write fails
2025-05-11 16:16 ` [PATCH v2] reftable/writer: fix memory leak if write fails Lidong Yan via GitGitGadget
@ 2025-05-12 8:25 ` Patrick Steinhardt
2025-05-12 10:54 ` lidongyan
2025-05-12 12:49 ` [PATCH v3 0/2] reftable/writer: fix memory leak when " Lidong Yan via GitGitGadget
1 sibling, 1 reply; 8+ messages in thread
From: Patrick Steinhardt @ 2025-05-12 8:25 UTC (permalink / raw)
To: Lidong Yan via GitGitGadget; +Cc: git, Lidong Yan
On Sun, May 11, 2025 at 04:16:04PM +0000, Lidong Yan via GitGitGadget wrote:
> From: Lidong Yan <502024330056@smail.nju.edu.cn>
>
> In reftable/writer.c:padded_write(), if w->writer failed, zeroed
> allocated in `reftable_calloc` will leak. w->writer could be
> `reftable_write_data` in reftable/stack.c, and could fail due to
> some write error. Simply add reftable_free(zeroed) will solve this
> problem.
>
> In reftable/writer.c:writer_index_hash(), if `reftable_buf_add` failed,
> key allocated by `reftable_malloc` will not be insert into `obj_index_tree`
> thus leaks. Simple add reftable_free(key) will solve this problem.
Nit: I think it would be sensible to split these up into two commits, as
they touch different areas of the code.
> diff --git a/reftable/writer.c b/reftable/writer.c
> index cb16f71be49..3b4ebdd6dce 100644
> --- a/reftable/writer.c
> +++ b/reftable/writer.c
> @@ -57,8 +57,10 @@ static int padded_write(struct reftable_writer *w, uint8_t *data, size_t len,
> return -1;
>
> n = w->write(w->write_arg, zeroed, w->pending_padding);
> - if (n < 0)
> + if (n < 0) {
> + reftable_free(zeroed);
> return n;
> + }
>
> w->pending_padding = 0;
> reftable_free(zeroed);
Makes sense.
> @@ -256,8 +258,10 @@ static int writer_index_hash(struct reftable_writer *w, struct reftable_buf *has
>
> reftable_buf_reset(&key->hash);
> err = reftable_buf_add(&key->hash, hash->buf, hash->len);
> - if (err < 0)
> + if (err < 0) {
> + reftable_free(key);
> return err;
> + }
> tree_insert(&w->obj_index_tree, key,
> &obj_index_tree_node_compare);
> } else {
Makes sense, as well. We want to add the node to the object index tree,
but if a step before fails then we naturally want to free the node.
Patrick
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2] reftable/writer: fix memory leak if write fails
2025-05-12 8:25 ` Patrick Steinhardt
@ 2025-05-12 10:54 ` lidongyan
0 siblings, 0 replies; 8+ messages in thread
From: lidongyan @ 2025-05-12 10:54 UTC (permalink / raw)
To: Patrick Steinhardt; +Cc: Lidong Yan via GitGitGadget, git
On 12/5/2025 at 16:25,Patrick Steinhardt <ps@pks.im> wrote:
> Nit: I think it would be sensible to split these up into two commits, as
> they touch different areas of the code.
I will split them in the next patch.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 0/2] reftable/writer: fix memory leak when write fails
2025-05-11 16:16 ` [PATCH v2] reftable/writer: fix memory leak if write fails Lidong Yan via GitGitGadget
2025-05-12 8:25 ` Patrick Steinhardt
@ 2025-05-12 12:49 ` Lidong Yan via GitGitGadget
2025-05-12 12:49 ` [PATCH v3 1/2] reftable/writer: fix memory leak when `padded_write()` fails Lidong Yan via GitGitGadget
` (2 more replies)
1 sibling, 3 replies; 8+ messages in thread
From: Lidong Yan via GitGitGadget @ 2025-05-12 12:49 UTC (permalink / raw)
To: git; +Cc: Patrick Steinhardt, Lidong Yan
Lidong Yan (2):
reftable/writer: fix memory leak when `padded_write()` fails
reftable/writer: fix memory leak when `writer_index_hash()` fails
reftable/writer.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
base-commit: 6f84262c44a89851c3ae5a6e4c1a9d06b2068d75
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1958%2Fbrandb97%2Ffix-reftable-padded-write-leak-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1958/brandb97/fix-reftable-padded-write-leak-v3
Pull-Request: https://github.com/git/git/pull/1958
Range-diff vs v2:
1: 9329ae2d478 ! 1: 13ebdd672ff reftable/writer: fix memory leak if write fails
@@ Metadata
Author: Lidong Yan <502024330056@smail.nju.edu.cn>
## Commit message ##
- reftable/writer: fix memory leak if write fails
+ reftable/writer: fix memory leak when `padded_write()` fails
In reftable/writer.c:padded_write(), if w->writer failed, zeroed
allocated in `reftable_calloc` will leak. w->writer could be
@@ Commit message
some write error. Simply add reftable_free(zeroed) will solve this
problem.
- In reftable/writer.c:writer_index_hash(), if `reftable_buf_add` failed,
- key allocated by `reftable_malloc` will not be insert into `obj_index_tree`
- thus leaks. Simple add reftable_free(key) will solve this problem.
-
Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn>
## reftable/writer.c ##
@@ reftable/writer.c: static int padded_write(struct reftable_writer *w, uint8_t *d
w->pending_padding = 0;
reftable_free(zeroed);
-@@ reftable/writer.c: static int writer_index_hash(struct reftable_writer *w, struct reftable_buf *has
-
- reftable_buf_reset(&key->hash);
- err = reftable_buf_add(&key->hash, hash->buf, hash->len);
-- if (err < 0)
-+ if (err < 0) {
-+ reftable_free(key);
- return err;
-+ }
- tree_insert(&w->obj_index_tree, key,
- &obj_index_tree_node_compare);
- } else {
-: ----------- > 2: 64f778ce2ba reftable/writer: fix memory leak when `writer_index_hash()` fails
--
gitgitgadget
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 1/2] reftable/writer: fix memory leak when `padded_write()` fails
2025-05-12 12:49 ` [PATCH v3 0/2] reftable/writer: fix memory leak when " Lidong Yan via GitGitGadget
@ 2025-05-12 12:49 ` Lidong Yan via GitGitGadget
2025-05-12 12:49 ` [PATCH v3 2/2] reftable/writer: fix memory leak when `writer_index_hash()` fails Lidong Yan via GitGitGadget
2025-05-12 14:34 ` [PATCH v3 0/2] reftable/writer: fix memory leak when write fails Patrick Steinhardt
2 siblings, 0 replies; 8+ messages in thread
From: Lidong Yan via GitGitGadget @ 2025-05-12 12:49 UTC (permalink / raw)
To: git; +Cc: Patrick Steinhardt, Lidong Yan, Lidong Yan
From: Lidong Yan <502024330056@smail.nju.edu.cn>
In reftable/writer.c:padded_write(), if w->writer failed, zeroed
allocated in `reftable_calloc` will leak. w->writer could be
`reftable_write_data` in reftable/stack.c, and could fail due to
some write error. Simply add reftable_free(zeroed) will solve this
problem.
Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn>
---
reftable/writer.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/reftable/writer.c b/reftable/writer.c
index cb16f71be49e..3ceb37428887 100644
--- a/reftable/writer.c
+++ b/reftable/writer.c
@@ -57,8 +57,10 @@ static int padded_write(struct reftable_writer *w, uint8_t *data, size_t len,
return -1;
n = w->write(w->write_arg, zeroed, w->pending_padding);
- if (n < 0)
+ if (n < 0) {
+ reftable_free(zeroed);
return n;
+ }
w->pending_padding = 0;
reftable_free(zeroed);
--
gitgitgadget
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 2/2] reftable/writer: fix memory leak when `writer_index_hash()` fails
2025-05-12 12:49 ` [PATCH v3 0/2] reftable/writer: fix memory leak when " Lidong Yan via GitGitGadget
2025-05-12 12:49 ` [PATCH v3 1/2] reftable/writer: fix memory leak when `padded_write()` fails Lidong Yan via GitGitGadget
@ 2025-05-12 12:49 ` Lidong Yan via GitGitGadget
2025-05-12 14:34 ` [PATCH v3 0/2] reftable/writer: fix memory leak when write fails Patrick Steinhardt
2 siblings, 0 replies; 8+ messages in thread
From: Lidong Yan via GitGitGadget @ 2025-05-12 12:49 UTC (permalink / raw)
To: git; +Cc: Patrick Steinhardt, Lidong Yan, Lidong Yan
From: Lidong Yan <502024330056@smail.nju.edu.cn>
In reftable/writer.c:writer_index_hash(), if `reftable_buf_add` failed,
key allocated by `reftable_malloc` will not be insert into `obj_index_tree`
thus leaks. Simple add reftable_free(key) will solve this problem.
Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn>
---
reftable/writer.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/reftable/writer.c b/reftable/writer.c
index 3ceb37428887..3b4ebdd6dced 100644
--- a/reftable/writer.c
+++ b/reftable/writer.c
@@ -258,8 +258,10 @@ static int writer_index_hash(struct reftable_writer *w, struct reftable_buf *has
reftable_buf_reset(&key->hash);
err = reftable_buf_add(&key->hash, hash->buf, hash->len);
- if (err < 0)
+ if (err < 0) {
+ reftable_free(key);
return err;
+ }
tree_insert(&w->obj_index_tree, key,
&obj_index_tree_node_compare);
} else {
--
gitgitgadget
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v3 0/2] reftable/writer: fix memory leak when write fails
2025-05-12 12:49 ` [PATCH v3 0/2] reftable/writer: fix memory leak when " Lidong Yan via GitGitGadget
2025-05-12 12:49 ` [PATCH v3 1/2] reftable/writer: fix memory leak when `padded_write()` fails Lidong Yan via GitGitGadget
2025-05-12 12:49 ` [PATCH v3 2/2] reftable/writer: fix memory leak when `writer_index_hash()` fails Lidong Yan via GitGitGadget
@ 2025-05-12 14:34 ` Patrick Steinhardt
2 siblings, 0 replies; 8+ messages in thread
From: Patrick Steinhardt @ 2025-05-12 14:34 UTC (permalink / raw)
To: Lidong Yan via GitGitGadget; +Cc: git, Lidong Yan
On Mon, May 12, 2025 at 12:49:02PM +0000, Lidong Yan via GitGitGadget wrote:
> Lidong Yan (2):
> reftable/writer: fix memory leak when `padded_write()` fails
> reftable/writer: fix memory leak when `writer_index_hash()` fails
>
> reftable/writer.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
Thanks, these look good to me.
Patrick
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-05-12 14:34 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-10 3:50 [PATCH] reftable/writer: fix memory leak when `padded_write()` fails Lidong Yan via GitGitGadget
2025-05-11 16:16 ` [PATCH v2] reftable/writer: fix memory leak if write fails Lidong Yan via GitGitGadget
2025-05-12 8:25 ` Patrick Steinhardt
2025-05-12 10:54 ` lidongyan
2025-05-12 12:49 ` [PATCH v3 0/2] reftable/writer: fix memory leak when " Lidong Yan via GitGitGadget
2025-05-12 12:49 ` [PATCH v3 1/2] reftable/writer: fix memory leak when `padded_write()` fails Lidong Yan via GitGitGadget
2025-05-12 12:49 ` [PATCH v3 2/2] reftable/writer: fix memory leak when `writer_index_hash()` fails Lidong Yan via GitGitGadget
2025-05-12 14:34 ` [PATCH v3 0/2] reftable/writer: fix memory leak when write fails Patrick Steinhardt
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.