diff options
author | René Scharfe <l.s.r@web.de> | 2020-11-17 22:59:49 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-11-18 14:15:58 -0800 |
commit | a1c74791d5ffaa6d723abb14cebf556499c3c4cb (patch) | |
tree | 172fbfdecf391c76ecd71d6ca78f24d366e8aa86 /builtin/gc.c | |
parent | Sixth batch (diff) | |
download | tgif-a1c74791d5ffaa6d723abb14cebf556499c3c4cb.tar.xz |
gc: fix cast in compare_tasks_by_selection()
compare_tasks_by_selection() is used with QSORT and gets passed pointers
to the elements of "static struct maintenance_task tasks[]". It casts
the *addresses* of these passed pointers to element pointers, though,
and thus effectively compares some unrelated values from the stack. Fix
the casts to actually compare array elements.
Detected by USan (make SANITIZE=undefined test).
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/gc.c')
-rw-r--r-- | builtin/gc.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/builtin/gc.c b/builtin/gc.c index 3d258b60c2..bc25ad52c7 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -1253,10 +1253,8 @@ static struct maintenance_task tasks[] = { static int compare_tasks_by_selection(const void *a_, const void *b_) { - const struct maintenance_task *a, *b; - - a = (const struct maintenance_task *)&a_; - b = (const struct maintenance_task *)&b_; + const struct maintenance_task *a = a_; + const struct maintenance_task *b = b_; return b->selected_order - a->selected_order; } |