ref_update_reject_duplicates(): add a sanity check

It's pretty cheap to make sure that the caller didn't pass us an unsorted list by accident, so do so. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Michael Haggerty committed May 22, 2017 at 16:17 UTC 8556f8d61330ec677dc48b0ef39e2017d6927708
1 file changed +8 -2
refs.c
+8 -2
@@ -1709,13 +1709,19 @@ int ref_update_reject_duplicates(struct string_list *refnames,
1709
1710 assert(err);
1711
1712 - for (i = 1; i < n; i++)
1713 - if (!strcmp(refnames->items[i - 1].string, refnames->items[i].string)) {
1712 + for (i = 1; i < n; i++) {
1713 + int cmp = strcmp(refnames->items[i - 1].string,
1714 + refnames->items[i].string);
1715 +
1716 + if (!cmp) {
1717 strbuf_addf(err,
1718 "multiple updates for ref '%s' not allowed.",
1719 refnames->items[i].string);
1720 return 1;
1721 + } else if (cmp > 0) {
1722 + die("BUG: ref_update_reject_duplicates() received unsorted list");
1723 }
1724 + }
1725 return 0;
1726 }
1727