summaryrefslogtreecommitdiff
path: root/merge-ort.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2021-04-16 20:53:34 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-04-16 20:53:34 (GMT)
commit257ae76ba9194c23a57a93033c499ee67bc1b037 (patch)
tree4ab8a2fe47490943026f80ada1019e2af7576693 /merge-ort.c
parent7bec8e7fa6175f51e79c55e28e6b2a547a986926 (diff)
parentc1ea48a8f74cfb39f9c0583b26b79a038c3d9ab8 (diff)
downloadgit-257ae76ba9194c23a57a93033c499ee67bc1b037.zip
git-257ae76ba9194c23a57a93033c499ee67bc1b037.tar.gz
git-257ae76ba9194c23a57a93033c499ee67bc1b037.tar.bz2
Merge branch 'ah/merge-ort-ubsan-fix'
Code clean-up for merge-ort backend. * ah/merge-ort-ubsan-fix: merge-ort: only do pointer arithmetic for non-empty lists
Diffstat (limited to 'merge-ort.c')
-rw-r--r--merge-ort.c20
1 files changed, 6 insertions, 14 deletions
diff --git a/merge-ort.c b/merge-ort.c
index d1f4cf8..b1795d8 100644
--- a/merge-ort.c
+++ b/merge-ort.c
@@ -2653,23 +2653,15 @@ static void write_tree(struct object_id *result_oid,
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 */