From 8436b58ee7e3ceced8835b1deebc60193aca0636 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Tue, 17 Jun 2014 12:48:40 +0200 Subject: [PATCH] msvcrt: Use size_t to store indexes in qsort. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It also avoids potential overflow while computing median position (found by Frédéric Delanoy). --- dlls/msvcrt/misc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dlls/msvcrt/misc.c b/dlls/msvcrt/misc.c index 36d0608f695..c07005a0a28 100644 --- a/dlls/msvcrt/misc.c +++ b/dlls/msvcrt/misc.c @@ -262,8 +262,9 @@ static void small_sort(void *base, MSVCRT_size_t nmemb, MSVCRT_size_t size, static void quick_sort(void *base, MSVCRT_size_t nmemb, MSVCRT_size_t size, int (CDECL *compar)(void *, const void *, const void *), void *context) { - int stack_lo[8*sizeof(MSVCRT_size_t)], stack_hi[8*sizeof(MSVCRT_size_t)], stack_pos; - int beg, end, lo, hi, med; + MSVCRT_size_t stack_lo[8*sizeof(MSVCRT_size_t)], stack_hi[8*sizeof(MSVCRT_size_t)]; + MSVCRT_size_t beg, end, lo, hi, med; + int stack_pos; stack_pos = 0; stack_lo[stack_pos] = 0; @@ -281,7 +282,7 @@ static void quick_sort(void *base, MSVCRT_size_t nmemb, MSVCRT_size_t size, lo = beg; hi = end; - med = (hi+lo+1)/2; + med = lo + (hi-lo+1)/2; if(compar(context, X(lo), X(med)) > 0) swap(X(lo), X(med), size); if(compar(context, X(lo), X(hi)) > 0)