ref_update_reject_duplicates(): add a sanity check
authorMichael Haggerty <mhagger@alum.mit.edu>
Mon, 22 May 2017 14:17:47 +0000 (16:17 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 23 May 2017 05:29:55 +0000 (14:29 +0900)
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>
refs.c
diff --git a/refs.c b/refs.c
index 143936a9c3e5a5db1c41f9c8923c0f05cd99f365..d1c781d94e145d42bec898b3cffb81cfdf97949b 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -1709,13 +1709,19 @@ int ref_update_reject_duplicates(struct string_list *refnames,
 
        assert(err);
 
-       for (i = 1; i < n; i++)
-               if (!strcmp(refnames->items[i - 1].string, refnames->items[i].string)) {
+       for (i = 1; i < n; i++) {
+               int cmp = strcmp(refnames->items[i - 1].string,
+                                refnames->items[i].string);
+
+               if (!cmp) {
                        strbuf_addf(err,
                                    "multiple updates for ref '%s' not allowed.",
                                    refnames->items[i].string);
                        return 1;
+               } else if (cmp > 0) {
+                       die("BUG: ref_update_reject_duplicates() received unsorted list");
                }
+       }
        return 0;
 }