]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'ah/merge-ort-ubsan-fix'
authorJunio C Hamano <gitster@pobox.com>
Fri, 16 Apr 2021 20:53:34 +0000 (13:53 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 16 Apr 2021 20:53:34 +0000 (13:53 -0700)
Code clean-up for merge-ort backend.

* ah/merge-ort-ubsan-fix:
  merge-ort: only do pointer arithmetic for non-empty lists

1  2 
merge-ort.c

diff --cc merge-ort.c
index d1f4cf8a1f2ed404c697bcabf36ef63a072a0f7f,3f55b438ecfec607858a49dd00cf0e203c6e0cbe..b1795d838eafa6b656b1fb2c0c46ccab34655434
@@@ -2653,23 -2491,14 +2653,15 @@@ static void write_tree(struct object_i
                       size_t hash_size)
  {
        size_t maxlen = 0, extra;
-       unsigned int nr = versions->nr - offset;
+       unsigned int nr;
        struct strbuf buf = STRBUF_INIT;
-       struct string_list relevant_entries = STRING_LIST_INIT_NODUP;
        int i;
  
-       /*
-        * We want to sort the last (versions->nr-offset) entries in versions.
-        * Do so by abusing the string_list API a bit: make another string_list
-        * that contains just those entries and then sort them.
-        *
-        * We won't use relevant_entries again and will let it just pop off the
-        * stack, so there won't be allocation worries or anything.
-        */
-       relevant_entries.items = versions->items + offset;
-       relevant_entries.nr = versions->nr - offset;
-       /* No need for STABLE_QSORT -- filenames must be unique */
-       QSORT(relevant_entries.items, relevant_entries.nr, tree_entry_order);
+       assert(offset <= versions->nr);
+       nr = versions->nr - offset;
+       if (versions->nr)
++              /* No need for STABLE_QSORT -- filenames must be unique */
+               QSORT(versions->items + offset, nr, tree_entry_order);
  
        /* Pre-allocate some space in buf */
        extra = hash_size + 8; /* 8: 6 for mode, 1 for space, 1 for NUL char */