From f7b6518d10d4a0ee09b49957df6e048ec622fa25 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Fri, 19 Dec 2014 13:07:35 +0300 Subject: [PATCH] don't sort array with single element --- ext/standard/array.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/ext/standard/array.c b/ext/standard/array.c index 041c68558e..b985b88cd9 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -3420,10 +3420,12 @@ static void php_array_intersect(INTERNAL_FUNCTION_PARAMETERS, int behavior, int *list++ = *p; } ZVAL_UNDEF(&list->val); - if (behavior == INTERSECT_NORMAL) { - zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket), intersect_data_compare_func); - } else if (behavior & INTERSECT_ASSOC) { /* triggered also when INTERSECT_KEY */ - zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket), intersect_key_compare_func); + if (hash->nNumOfElements > 1) { + if (behavior == INTERSECT_NORMAL) { + zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket), intersect_data_compare_func); + } else if (behavior & INTERSECT_ASSOC) { /* triggered also when INTERSECT_KEY */ + zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket), intersect_key_compare_func); + } } } @@ -3838,10 +3840,12 @@ static void php_array_diff(INTERNAL_FUNCTION_PARAMETERS, int behavior, int data_ *list++ = *p; } ZVAL_UNDEF(&list->val); - if (behavior == DIFF_NORMAL) { - zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket), diff_data_compare_func); - } else if (behavior & DIFF_ASSOC) { /* triggered also when DIFF_KEY */ - zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket), diff_key_compare_func); + if (hash->nNumOfElements > 1) { + if (behavior == DIFF_NORMAL) { + zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket), diff_data_compare_func); + } else if (behavior & DIFF_ASSOC) { /* triggered also when DIFF_KEY */ + zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket), diff_key_compare_func); + } } } -- 2.49.0