diff options
author | Junio C Hamano <gitster@pobox.com> | 2021-08-25 01:32:36 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-08-25 01:32:36 +0300 |
commit | 5c933f0155959452f299cd4a0a65fe22b5c239be (patch) | |
tree | 50e1e5dc7b95015bb00fb0e3de232b6118c14faf /builtin | |
parent | e48a623dea0c9170e4daa5e27e5bbc3f1ce84354 (diff) | |
parent | 561fa03529202a36e0d77548fdcb5d81422c1865 (diff) |
Merge branch 'ab/pack-stdin-packs-fix'
Input validation of "git pack-objects --stdin-packs" has been
corrected.
* ab/pack-stdin-packs-fix:
pack-objects: fix segfault in --stdin-packs option
pack-objects tests: cover blindspots in stdin handling
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/pack-objects.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index de00adbb9e..df49f656b9 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -3311,9 +3311,26 @@ static void read_packs_list_from_stdin(void) } /* - * First handle all of the excluded packs, marking them as kept in-core - * so that later calls to add_object_entry() discards any objects that - * are also found in excluded packs. + * Arguments we got on stdin may not even be packs. First + * check that to avoid segfaulting later on in + * e.g. pack_mtime_cmp(), excluded packs are handled below. + * + * Since we first parsed our STDIN and then sorted the input + * lines the pack we error on will be whatever line happens to + * sort first. This is lazy, it's enough that we report one + * bad case here, we don't need to report the first/last one, + * or all of them. + */ + for_each_string_list_item(item, &include_packs) { + struct packed_git *p = item->util; + if (!p) + die(_("could not find pack '%s'"), item->string); + } + + /* + * Then, handle all of the excluded packs, marking them as + * kept in-core so that later calls to add_object_entry() + * discards any objects that are also found in excluded packs. */ for_each_string_list_item(item, &exclude_packs) { struct packed_git *p = item->util; |