]> granicus.if.org Git - php/commitdiff
Fixed reference conversion
authorDmitry Stogov <dmitry@zend.com>
Thu, 13 Mar 2014 18:07:14 +0000 (22:07 +0400)
committerDmitry Stogov <dmitry@zend.com>
Thu, 13 Mar 2014 18:07:14 +0000 (22:07 +0400)
Zend/zend_operators.c

index 55e29989b5be7f2484e4b1a657d6cc7f05d98aa6..fdfa5aba3b97b75c394b08a2232c3a57c6960423 100644 (file)
@@ -183,7 +183,18 @@ ZEND_API double zend_string_to_double(const char *number, zend_uint length) /* {
 
 ZEND_API void convert_scalar_to_number(zval *op TSRMLS_DC) /* {{{ */
 {
+try_again:
        switch (Z_TYPE_P(op)) {
+               case IS_REFERENCE:
+                       if (Z_REFCOUNT_P(op) == 1) {
+                               zend_reference *ref = Z_REF_P(op);
+                               ZVAL_COPY_VALUE(op, Z_REFVAL_P(op));
+                               efree(ref);
+                       } else {
+                               Z_DELREF_P(op);
+                               ZVAL_COPY_VALUE(op, Z_REFVAL_P(op));
+                       }
+                       goto try_again;
                case IS_STRING:
                        {
                                zend_string *str;