summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/var.c38
1 files changed, 20 insertions, 18 deletions
diff --git a/ext/standard/var.c b/ext/standard/var.c
index ac0dadc839..8338959088 100644
--- a/ext/standard/var.c
+++ b/ext/standard/var.c
@@ -300,25 +300,27 @@ void php_var_serialize(pval *buf, pval **struc)
continue;
}
- switch (i) {
- case HASH_KEY_IS_LONG:
- MAKE_STD_ZVAL(d);
- d->type = IS_LONG;
- d->value.lval = index;
- php_var_serialize(buf, &d);
- FREE_ZVAL(d);
- break;
- case HASH_KEY_IS_STRING:
- MAKE_STD_ZVAL(d);
- d->type = IS_STRING;
- d->value.str.val = key;
- d->value.str.len = strlen(key);
- php_var_serialize(buf, &d);
- efree(key);
- FREE_ZVAL(d);
- break;
+ if (!(*data)->is_ref) {
+ switch (i) {
+ case HASH_KEY_IS_LONG:
+ MAKE_STD_ZVAL(d);
+ d->type = IS_LONG;
+ d->value.lval = index;
+ php_var_serialize(buf, &d);
+ FREE_ZVAL(d);
+ break;
+ case HASH_KEY_IS_STRING:
+ MAKE_STD_ZVAL(d);
+ d->type = IS_STRING;
+ d->value.str.val = key;
+ d->value.str.len = strlen(key);
+ php_var_serialize(buf, &d);
+ efree(key);
+ FREE_ZVAL(d);
+ break;
+ }
+ php_var_serialize(buf, data);
}
- php_var_serialize(buf, data);
}
}
STR_CAT(buf, "}", 1);