avoid crashing when nel==0 is passed to qsort
authorRich Felker <dalias@aerifal.cx>
Fri, 29 Apr 2011 15:14:55 +0000 (11:14 -0400)
committerRich Felker <dalias@aerifal.cx>
Fri, 29 Apr 2011 15:14:55 +0000 (11:14 -0400)
src/stdlib/qsort.c

index 866af0e..434d935 100644 (file)
@@ -155,12 +155,16 @@ void qsort(void *base, size_t nel, size_t width, cmpfun cmp)
 {
        size_t lp[12*sizeof(size_t)];
        size_t i, size = width * nel;
 {
        size_t lp[12*sizeof(size_t)];
        size_t i, size = width * nel;
-       unsigned char *head = base,
-                     *high = head + size - width;
+       unsigned char *head, *high;
        size_t p[2] = {1, 0};
        int pshift = 1;
        int trail;
 
        size_t p[2] = {1, 0};
        int pshift = 1;
        int trail;
 
+       if (!size) return;
+
+       head = base;
+       high = head + size - width;
+
        /* Precompute Leonardo numbers, scaled by element width */
        for(lp[0]=lp[1]=width, i=2; (lp[i]=lp[i-2]+lp[i-1]+width) < size; i++);
 
        /* Precompute Leonardo numbers, scaled by element width */
        for(lp[0]=lp[1]=width, i=2; (lp[i]=lp[i-2]+lp[i-1]+width) < size; i++);