send-pack: always allocate receive status

In `receive_status()`, we record the reason why ref updates have been rejected by the remote via the `remote_status`. But while we allocate the assigned string when a reason was given, we assign a string constant when no reason was given. This has been working fine so far due to two reasons: - We don't ever free the refs in git-send-pack(1)' - Remotes always give a reason, at least as implemented by Git proper. Adapt the code to always allocate the receive status string and free the refs. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Jun 7, 2024 at 08:38 UTC 5bd0851d97be732470eab8cb8d7255c7050ef384
2 files changed +3 -1
builtin/send-pack.c
+2
@@ -336,5 +336,7 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix)
336 /* stable plumbing output; do not modify or localize */
337 fprintf(stderr, "Everything up-to-date\n");
338
339 + free_refs(remote_refs);
340 + free_refs(local_refs);
341 return ret;
342 }
send-pack.c
+1 -1
@@ -259,7 +259,7 @@ static int receive_status(struct packet_reader *reader, struct ref *refs)
259 if (p)
260 hint->remote_status = xstrdup(p);
261 else
262 - hint->remote_status = "failed";
262 + hint->remote_status = xstrdup("failed");
263 } else {
264 hint->status = REF_STATUS_OK;
265 hint->remote_status = xstrdup_or_null(p);