File qsort-invalid-cmp.patch of Package glibc

Index: glibc-2.31/stdlib/qsort.c
===================================================================
--- glibc-2.31.orig/stdlib/qsort.c
+++ glibc-2.31/stdlib/qsort.c
@@ -137,10 +137,12 @@ _quicksort (void *const pbase, size_t to
 	     that this algorithm runs much faster than others. */
 	  do
 	    {
-	      while ((*cmp) ((void *) left_ptr, (void *) mid, arg) < 0)
+	      while (left_ptr != mid
+		     && (*cmp) ((void *) left_ptr, (void *) mid, arg) < 0)
 		left_ptr += size;
 
-	      while ((*cmp) ((void *) mid, (void *) right_ptr, arg) < 0)
+	      while (right_ptr != mid
+		     && (*cmp) ((void *) mid, (void *) right_ptr, arg) < 0)
 		right_ptr -= size;
 
 	      if (left_ptr < right_ptr)
@@ -225,7 +227,8 @@ _quicksort (void *const pbase, size_t to
     while ((run_ptr += size) <= end_ptr)
       {
 	tmp_ptr = run_ptr - size;
-	while ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, arg) < 0)
+	while (tmp_ptr != base_ptr
+	       && (*cmp) ((void *) run_ptr, (void *) tmp_ptr, arg) < 0)
 	  tmp_ptr -= size;
 
 	tmp_ptr += size;
openSUSE Build Service is sponsored by