pack-objects: fix segfault in --stdin-packs option
commit561fa03529202a36e0d77548fdcb5d81422c1865
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Fri, 9 Jul 2021 10:13:48 +0000 (9 12:13 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 9 Jul 2021 18:53:40 +0000 (9 11:53 -0700)
treef3dd9c9b67154d4cb45fe46bb780ea7528e62632
parentfb20d4b1268d97646ae24f07661892cf6da64c31
pack-objects: fix segfault in --stdin-packs option

Fix a segfault in the --stdin-packs option added in
339bce27f4f (builtin/pack-objects.c: add '--stdin-packs' option,
2021-02-22).

The read_packs_list_from_stdin() function didn't check that the lines
it was reading were valid packs, and thus when doing the QSORT() with
pack_mtime_cmp() we'd have a NULL "util" field. The "util" field is
used to associate the names of included/excluded packs with the
packed_git structs they correspond to.

The logic error was in assuming that we could iterate all packs and
annotate the excluded and included packs we got, as opposed to
checking the lines we got on stdin. There was a check for excluded
packs, but included packs were simply assumed to be valid.

As noted in the test we'll not report the first bad line, but whatever
line sorted first according to the string-list.c API. In this case I
think that's fine. There was further discussion of alternate
approaches in [1].

Even though we're being lazy let's assert the line we do expect to get
in the test, since whoever changes this code in the future might miss
this case, and would want to update the test and comments.

1. http://lore.kernel.org/git/YND3h2l10PlnSNGJ@nand.local

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/pack-objects.c
t/t5300-pack-object.sh