Module: wine Branch: master Commit: 34d17c9ea18f43abfc7eefa48fa862a611dccfa2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=34d17c9ea18f43abfc7eefa48f...
Author: Marcus Meissner marcus@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); }