summaryrefslogtreecommitdiff
path: root/Zend/zend_operators.c
diff options
context:
space:
mode:
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: