Message ID | 58229f369d7bb3eb1883de9ba0ff2ad974853c5b.1700246487.git.fweimer@redhat.com |
---|---|
State | New |
Headers | show |
Series | Various qsort fixes | expand |
On 17/11/23 15:44, Florian Weimer wrote: > 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. LGTM, thanks. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> > --- > stdlib/qsort.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/stdlib/qsort.c b/stdlib/qsort.c > index ad110e8a89..6d0c4447ec 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;
diff --git a/stdlib/qsort.c b/stdlib/qsort.c index ad110e8a89..6d0c4447ec 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;