aboutsummaryrefslogtreecommitdiff
path: root/stdlib
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2023-11-21 16:45:35 +0100
committerFlorian Weimer <fweimer@redhat.com>2023-11-21 16:45:47 +0100
commite4d8117b82065dc72e8df80097360e7c05a349b9 (patch)
tree6874c1f8d0da6e199a725d03df8f1b46f7f04bef /stdlib
parentdd858522bf36ae16496ea01ff8b65e16b4e5c22b (diff)
downloadglibc-e4d8117b82065dc72e8df80097360e7c05a349b9.zip
glibc-e4d8117b82065dc72e8df80097360e7c05a349b9.tar.gz
glibc-e4d8117b82065dc72e8df80097360e7c05a349b9.tar.bz2
stdlib: Avoid another self-comparison in qsort
In the insertion phase, we could run off the start of the array if the comparison function never runs zero. In that case, it never finds the initial element that terminates the iteration. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/qsort.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/stdlib/qsort.c b/stdlib/qsort.c
index ad110e8..6d0c444 100644
--- a/stdlib/qsort.c
+++ b/stdlib/qsort.c
@@ -217,7 +217,7 @@ insertion_sort_qsort_partitions (void *const pbase, size_t total_elems,
while ((run_ptr += size) <= end_ptr)
{
tmp_ptr = run_ptr - size;
- while (cmp (run_ptr, tmp_ptr, arg) < 0)
+ while (run_ptr != tmp_ptr && cmp (run_ptr, tmp_ptr, arg) < 0)
tmp_ptr -= size;
tmp_ptr += size;