]> granicus.if.org Git - php/commitdiff
Fixed crash in Zend/tests/bug69891.phpt on x86 (32-bit).
authorDmitry Stogov <dmitry@zend.com>
Mon, 22 Jun 2015 09:53:52 +0000 (12:53 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 22 Jun 2015 09:53:52 +0000 (12:53 +0300)
compare_function() now has to be compatible with binary_op_type (use fastcall convention).
Introduced new zval_compare_function() to be used as zval comparison callback instead of compare_function().

Zend/zend_operators.c
Zend/zend_operators.h
ext/standard/array.c

index 7e3b458bbed781b8b86c6efe64f6291bd9c74e64..26584745dcc4bd81800e910d62643cd2d1da66c2 100644 (file)
@@ -1760,7 +1760,7 @@ static inline void zend_free_obj_get_result(zval *op) /* {{{ */
 }
 /* }}} */
 
-ZEND_API int compare_function(zval *result, zval *op1, zval *op2) /* {{{ */
+static zend_always_inline int i_compare_function(zval *result, zval *op1, zval *op2) /* {{{ */
 {
        int ret;
        int converted = 0;
@@ -1942,6 +1942,18 @@ ZEND_API int compare_function(zval *result, zval *op1, zval *op2) /* {{{ */
 }
 /* }}} */
 
+ZEND_API int ZEND_FASTCALL compare_function(zval *result, zval *op1, zval *op2) /* {{{ */
+{
+       return i_compare_function(result, op1, op2);
+}
+/* }}} */
+
+ZEND_API int zval_compare_function(zval *result, zval *op1, zval *op2) /* {{{ */
+{
+       return i_compare_function(result, op1, op2);
+}
+/* }}} */
+
 static int hash_zval_identical_function(zval *z1, zval *z2) /* {{{ */
 {
        zval result;
index 17d1bcffb489d0221b4373953e2dd47249975469..601508ca276d2925b3e2fc6f75336a11e28d8f8b 100644 (file)
@@ -327,7 +327,8 @@ again:
        return result;
 }
 
-ZEND_API int compare_function(zval *result, zval *op1, zval *op2);
+ZEND_API int ZEND_FASTCALL compare_function(zval *result, zval *op1, zval *op2);
+ZEND_API int zval_compare_function(zval *result, zval *op1, zval *op2);
 ZEND_API int numeric_compare_function(zval *result, zval *op1, zval *op2);
 ZEND_API int string_compare_function_ex(zval *result, zval *op1, zval *op2, zend_bool case_insensitive);
 ZEND_API int string_compare_function(zval *result, zval *op1, zval *op2);
index fdfb9107d98a0388cb36a2658c6539b698659603..a998079d649cf4dddc18a8793d3fe589fbc1ba69 100644 (file)
@@ -164,7 +164,7 @@ static void php_set_compare_func(zend_long sort_type) /* {{{ */
 
                case PHP_SORT_REGULAR:
                default:
-                       ARRAYG(compare_func) = compare_function;
+                       ARRAYG(compare_func) = zval_compare_function;
                        break;
        }
 }