Changeset 20949 in webkit for trunk/JavaScriptCore
- Timestamp:
- Apr 19, 2007, 7:02:25 AM (18 years ago)
- Location:
- trunk/JavaScriptCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r20867 r20949 1 2007-04-19 Mark Rowe <[email protected]> 2 3 Reviewed by Darin. 4 5 Fix http://bugs.webkit.org/show_bug.cgi?id=13401 6 Bug 13401: Reproducible crash calling myArray.sort(compareFn) from within 7 a sort comparison function 8 9 * kjs/array_object.cpp: 10 (ArrayInstance::sort): Save/restore the static variables around calls to qsort 11 to ensure nested calls to ArrayInstance::sort behave correctly. 12 1 13 2007-04-12 Deneb Meketa <[email protected]> 2 14 -
trunk/JavaScriptCore/kjs/array_object.cpp
r20569 r20949 285 285 } 286 286 287 static ExecState *execForCompareByStringForQSort;287 static ExecState* execForCompareByStringForQSort = 0; 288 288 289 289 static int compareByStringForQSort(const void *a, const void *b) … … 301 301 } 302 302 303 void ArrayInstance::sort(ExecState *exec)303 void ArrayInstance::sort(ExecState* exec) 304 304 { 305 305 int lengthNotIncludingUndefined = pushUndefinedObjectsToEnd(exec); 306 306 307 ExecState* oldExec = execForCompareByStringForQSort; 307 308 execForCompareByStringForQSort = exec; 308 qsort(storage, lengthNotIncludingUndefined, sizeof(JSValue 309 execForCompareByStringForQSort = 0;309 qsort(storage, lengthNotIncludingUndefined, sizeof(JSValue*), compareByStringForQSort); 310 execForCompareByStringForQSort = oldExec; 310 311 } 311 312 … … 326 327 }; 327 328 328 static CompareWithCompareFunctionArguments *compareWithCompareFunctionArguments;329 static CompareWithCompareFunctionArguments* compareWithCompareFunctionArguments = 0; 329 330 330 331 static int compareWithCompareFunctionForQSort(const void *a, const void *b) … … 349 350 } 350 351 351 void ArrayInstance::sort(ExecState *exec, JSObject *compareFunction)352 void ArrayInstance::sort(ExecState* exec, JSObject* compareFunction) 352 353 { 353 354 int lengthNotIncludingUndefined = pushUndefinedObjectsToEnd(exec); 354 355 356 CompareWithCompareFunctionArguments* oldArgs = compareWithCompareFunctionArguments; 355 357 CompareWithCompareFunctionArguments args(exec, compareFunction); 356 358 compareWithCompareFunctionArguments = &args; 357 qsort(storage, lengthNotIncludingUndefined, sizeof(JSValue 358 compareWithCompareFunctionArguments = 0;359 qsort(storage, lengthNotIncludingUndefined, sizeof(JSValue*), compareWithCompareFunctionForQSort); 360 compareWithCompareFunctionArguments = oldArgs; 359 361 } 360 362
Note:
See TracChangeset
for help on using the changeset viewer.