Index: src/array.js |
=================================================================== |
--- src/array.js (revision 382) |
+++ src/array.js (working copy) |
@@ -672,6 +672,8 @@ |
if (from >= to - 1) return; |
var pivot_index = $floor($random() * (to - from)) + from; |
var pivot = a[pivot_index]; |
+ // Issue 95: Keep the pivot element out of the comparisons to avoid |
+ // infinite recursion if comparefn(pivot, pivot) != 0. |
a[pivot_index] = a[to - 1]; |
a[to - 1] = pivot; |
var low_end = from; // Upper bound of the elements lower than pivot. |
@@ -692,6 +694,7 @@ |
i++; |
} |
} |
+ // Restore the pivot element to its rightful place. |
a[to - 1] = a[high_start]; |
a[high_start] = pivot; |
high_start++; |