| 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++;
|
|
|