]> granicus.if.org Git - php/commitdiff
Fixed converting IS_REFERENCE to string
authorDmitry Stogov <dmitry@zend.com>
Tue, 25 Feb 2014 09:21:03 +0000 (13:21 +0400)
committerDmitry Stogov <dmitry@zend.com>
Tue, 25 Feb 2014 09:21:03 +0000 (13:21 +0400)
Zend/zend.c
Zend/zend_operators.c

index 532cdf35e2d3f09f89fb3b486b2efdb58093eb75..fbb5c07de5bc03c6480bb70424b6d8f98cbcf37e 100644 (file)
@@ -225,6 +225,14 @@ ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_cop
                *use_copy = 0;
                return;
        }
+       if (Z_TYPE_P(expr) == IS_REFERENCE) {
+               expr = Z_REFVAL_P(expr);
+               if (Z_TYPE_P(expr) == IS_STRING) {
+                       ZVAL_STR(expr_copy, Z_STR_P(expr));
+                       *use_copy = 1;
+                       return;
+               }
+       }
        switch (Z_TYPE_P(expr)) {
                case IS_NULL:
                        Z_STR_P(expr_copy) = STR_EMPTY_ALLOC();
index 9b46ae4456304c59d1bef905e56b07424dcb6996..849f4d3bd36f00fb81cb004133d2f963e9f3ca60 100644 (file)
@@ -1425,20 +1425,10 @@ ZEND_API int string_compare_function_ex(zval *result, zval *op1, zval *op2, zend
        int use_copy1 = 0, use_copy2 = 0;
 
        if (Z_TYPE_P(op1) != IS_STRING) {
-               if (Z_TYPE_P(op1) == IS_REFERENCE) {
-                       op1 = Z_REFVAL_P(op1);
-               }
-               if (Z_TYPE_P(op1) != IS_STRING) {
-                       zend_make_printable_zval(op1, &op1_copy, &use_copy1);
-               }
+               zend_make_printable_zval(op1, &op1_copy, &use_copy1);
        }
        if (Z_TYPE_P(op2) != IS_STRING) {
-               if (Z_TYPE_P(op2) == IS_REFERENCE) {
-                       op2 = Z_REFVAL_P(op2);
-               }
-               if (Z_TYPE_P(op2) != IS_STRING) {
-                       zend_make_printable_zval(op2, &op2_copy, &use_copy2);
-               }
+               zend_make_printable_zval(op2, &op2_copy, &use_copy2);
        }
 
        if (use_copy1) {