builtin/upload-archive: fix leaking args passed to `write_archive()`
commit149c9e200c18316432a99a9b5edfa0d0b4d50bc5
authorPatrick Steinhardt <ps@pks.im>
Thu, 22 Aug 2024 09:17:27 +0000 (22 11:17 +0200)
committerJunio C Hamano <gitster@pobox.com>
Thu, 22 Aug 2024 16:18:04 +0000 (22 09:18 -0700)
treec088f2bd35ded0f0068a44b5cc4b008a893a9e63
parentff0935b96e414ff7115f281308c33fb93e4e26ce
builtin/upload-archive: fix leaking args passed to `write_archive()`

In git-upload-archive(1), we pass an array of arguments to
`write_archive()` to tell it what exactly to do. We don't ever clear the
vector though, causing a memory leak. Furthermore though, the call to
`write_archive()` may cause contents of the array to be modified, which
would cause us to leak memory to allocated strings held by it.

Fix the issue by having `write_archive()` create a shallow copy of
`argv` before parsing the arguments. Like this, we won't modify the
caller's array and can easily `strvec_clear()` it to plug these memory
leaks.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
archive.c
builtin/upload-archive.c