aboutsummaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
authorDeveshi Dwivedi <deveshigurgaon@gmail.com>2026-03-15 09:44:44 +0000
committerJunio C Hamano <gitster@pobox.com>2026-03-15 14:46:51 -0700
commit8f8e1b080701d4b02ca3732eed2706b1a5328c5d (patch)
tree3799e1f859d4212dc0f4c2eb1689dd857d3382d0 /builtin
parent65fec23b577d09122865d239ce454d7946691c2a (diff)
downloadgit-8f8e1b080701d4b02ca3732eed2706b1a5328c5d.tar.xz
stash: do not pass strbuf by value
save_untracked_files() takes its 'files' parameter as struct strbuf by value. Passing a strbuf by value copies the struct but shares the underlying buffer between caller and callee, risking a dangling pointer and double-free if the callee reallocates. The function needs both the buffer and its length for pipe_command(), so a plain const char * is not sufficient here. Switch the parameter to struct strbuf * and update the caller to pass a pointer. Signed-off-by: Deveshi Dwivedi <deveshigurgaon@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r--builtin/stash.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/builtin/stash.c b/builtin/stash.c
index e79d612e57..472eebd6ed 100644
--- a/builtin/stash.c
+++ b/builtin/stash.c
@@ -1232,7 +1232,7 @@ static int check_changes(const struct pathspec *ps, int include_untracked,
}
static int save_untracked_files(struct stash_info *info, struct strbuf *msg,
- struct strbuf files)
+ struct strbuf *files)
{
int ret = 0;
struct strbuf untracked_msg = STRBUF_INIT;
@@ -1246,7 +1246,7 @@ static int save_untracked_files(struct stash_info *info, struct strbuf *msg,
stash_index_path.buf);
strbuf_addf(&untracked_msg, "untracked files on %s\n", msg->buf);
- if (pipe_command(&cp_upd_index, files.buf, files.len, NULL, 0,
+ if (pipe_command(&cp_upd_index, files->buf, files->len, NULL, 0,
NULL, 0)) {
ret = -1;
goto done;
@@ -1499,7 +1499,7 @@ static int do_create_stash(const struct pathspec *ps, struct strbuf *stash_msg_b
parents = NULL;
if (include_untracked) {
- if (save_untracked_files(info, &msg, untracked_files)) {
+ if (save_untracked_files(info, &msg, &untracked_files)) {
if (!quiet)
fprintf_ln(stderr, _("Cannot save "
"the untracked files"));