diff options
author | Martin Ågren <martin.agren@gmail.com> | 2018-06-05 19:54:40 +0000 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-06-11 10:11:32 -0700 |
commit | 7865d157a5e8d86f46e626d933bda5c18eab196a (patch) | |
tree | 85020468a5a58315a8210ec9045b7176535e9b31 /builtin | |
parent | refspec: add back a refspec_item_init() function (diff) | |
download | tgif-7865d157a5e8d86f46e626d933bda5c18eab196a.tar.xz |
refspec: initalize `refspec_item` in `valid_fetch_refspec()`
We allocate a `struct refspec_item` on the stack without initializing
it. In particular, its `dst` and `src` members will contain some random
data from the stack. When we later call `refspec_item_clear()`, it will
call `free()` on those pointers. So if the call to `parse_refspec()` did
not assign to them, we will be freeing some random "pointers". This is
undefined behavior.
To the best of my understanding, this cannot currently be triggered by
user-provided data. And for what it's worth, the test-suite does not
trigger this with SANITIZE=address. It can be provoked by calling
`valid_fetch_refspec(":*")`.
Zero the struct, as is done in other users of `struct refspec_item` by
using the refspec_item_init() initialization function.
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
0 files changed, 0 insertions, 0 deletions