]> granicus.if.org Git - php/commitdiff
Fixed EG(error_zval) handling
authorDmitry Stogov <dmitry@zend.com>
Tue, 25 Feb 2014 19:39:25 +0000 (23:39 +0400)
committerDmitry Stogov <dmitry@zend.com>
Tue, 25 Feb 2014 19:39:25 +0000 (23:39 +0400)
Zend/zend_execute.c

index 322fe467999cf8a3b903dca50d160e094e419f9e..9bdee5c2c1ae6003cab20008156fecbd51602492 100644 (file)
@@ -1383,7 +1383,7 @@ static void zend_fetch_property_address(zval *result, zval *container, zval *pro
 {
        if (Z_TYPE_P(container) != IS_OBJECT) {
                if (container == &EG(error_zval)) {
-                       result = &EG(error_zval);
+                       ZVAL_INDIRECT(result, &EG(error_zval));
                        return;
                }
 
@@ -1398,7 +1398,7 @@ static void zend_fetch_property_address(zval *result, zval *container, zval *pro
                        object_init(container);
                } else {
                        zend_error(E_WARNING, "Attempt to modify property of non-object");
-                       result = &EG(error_zval);
+                       ZVAL_INDIRECT(result, &EG(error_zval));
                        return;
                }
        }
@@ -1408,7 +1408,8 @@ static void zend_fetch_property_address(zval *result, zval *container, zval *pro
                if (NULL == ptr) {
                        if (Z_OBJ_HT_P(container)->read_property &&
                                (ptr = Z_OBJ_HT_P(container)->read_property(container, prop_ptr, type, key TSRMLS_CC)) != NULL) {
-                               ZVAL_COPY(result, ptr);
+//???                          ZVAL_COPY(result, ptr);
+                               ZVAL_INDIRECT(result, ptr);
                        } else {
                                zend_error_noreturn(E_ERROR, "Cannot access undefined property for object with overloaded property access");
                        }
@@ -1418,10 +1419,11 @@ static void zend_fetch_property_address(zval *result, zval *container, zval *pro
                }
        } else if (Z_OBJ_HT_P(container)->read_property) {
                zval *ptr = Z_OBJ_HT_P(container)->read_property(container, prop_ptr, type, key TSRMLS_CC);
-               ZVAL_COPY(result, ptr);
+//???          ZVAL_COPY(result, ptr);
+               ZVAL_INDIRECT(result, ptr);
        } else {
                zend_error(E_WARNING, "This object doesn't support property references");
-               result = &EG(error_zval);
+               ZVAL_INDIRECT(result, &EG(error_zval));
        }
 }