Marcus Meissner : ntdll: qsort: comparator must not get the same pointer.

Alexandre Julliard julliard at winehq.org
Mon May 24 11:30:49 CDT 2010


Module: wine
Branch: master
Commit: 34d17c9ea18f43abfc7eefa48fa862a611dccfa2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=34d17c9ea18f43abfc7eefa48fa862a611dccfa2

Author: Marcus Meissner <marcus at jet.franken.de>
Date:   Sun May 23 13:33:40 2010 +0200

ntdll: qsort: comparator must not get the same pointer.

---

 dlls/ntdll/misc.c         |    2 +-
 dlls/ntdll/tests/string.c |    3 +++
 2 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/dlls/ntdll/misc.c b/dlls/ntdll/misc.c
index 621848e..2d7c0a7 100644
--- a/dlls/ntdll/misc.c
+++ b/dlls/ntdll/misc.c
@@ -272,7 +272,7 @@ NTDLL_mergesort( void *arr, void *barr, int elemsize, int(__cdecl *compar)(const
 
         for (k=left; k<=right; k++) {
             /*arr[k]=(barr[i]<barr[j])?barr[i++]:barr[j--];*/
-            if (compar(X(barr,i),X(barr,j))<0) {
+            if (i != j && compar(X(barr,i),X(barr,j))<0) {
                 memcpy(X(arr,k),X(barr,i),elemsize);
                 i++;
             } else {
diff --git a/dlls/ntdll/tests/string.c b/dlls/ntdll/tests/string.c
index cd362ed..3f7236a 100644
--- a/dlls/ntdll/tests/string.c
+++ b/dlls/ntdll/tests/string.c
@@ -1145,16 +1145,19 @@ static void test_wcsrchr(void)
 
 static __cdecl int intcomparefunc(const void *a, const void*b)
 {
+	ok (a != b, "must never get the same pointer\n");
 	return (*(int*)a) - (*(int*)b);
 }
 
 static __cdecl int charcomparefunc(const void *a, const void*b)
 {
+	ok (a != b, "must never get the same pointer\n");
 	return (*(char*)a) - (*(char*)b);
 }
 
 static __cdecl int strcomparefunc(const void *a, const void*b)
 {
+	ok (a != b, "must never get the same pointer\n");
 	return lstrcmpA(*(char**)a,*(char**)b);
 }
 




More information about the wine-cvs mailing list