summaryrefslogtreecommitdiff
path: root/Zend/zend_operators.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-02-21 22:59:51 +0400
committerDmitry Stogov <dmitry@zend.com>2014-02-21 22:59:51 +0400
commit6454684212b4687167cc058ad77972f2d456cf20 (patch)
tree7c6a6f39988d765593b8dd7e15187cb1b0add4de /Zend/zend_operators.c
parent008a42e7c8799fa7885f805b714c16d8e703b35f (diff)
downloadphp-git-6454684212b4687167cc058ad77972f2d456cf20.tar.gz
Use better data structures (incomplete)
Diffstat (limited to 'Zend/zend_operators.c')
-rw-r--r--Zend/zend_operators.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index 8ead9201ed..1803d5075d 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -610,7 +610,7 @@ ZEND_API void _convert_to_string(zval *op ZEND_FILE_LINE_DC) /* {{{ */
}
break;
case IS_RESOURCE: {
- long tmp = Z_LVAL_P(op);
+ long tmp = Z_RES_HANDLE_P(op);
char *str;
int len;
TSRMLS_FETCH();
@@ -747,7 +747,14 @@ ZEND_API void convert_to_object(zval *op) /* {{{ */
switch (Z_TYPE_P(op)) {
case IS_ARRAY:
{
- object_and_properties_init(op, zend_standard_class_def, Z_ARRVAL_P(op));
+ HashTable *properties = emalloc(sizeof(HashTable));
+ zend_array *arr = Z_ARR_P(op);
+
+ memcpy(properties, Z_ARRVAL_P(op), sizeof(HashTable));
+ object_and_properties_init(op, zend_standard_class_def, properties);
+ if (--arr->gc.refcount == 0) {
+ efree(arr);
+ }
break;
}
case IS_OBJECT: