Piotr Caban : msvcrt: Use size_t to store indexes in qsort.

Alexandre Julliard julliard at winehq.org
Tue Jun 17 14:40:51 CDT 2014


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Tue Jun 17 12:48:40 2014 +0200

msvcrt: Use size_t to store indexes in qsort.

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 36d0608..c07005a 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)




More information about the wine-cvs mailing list