From: Sascha Schumann Date: Fri, 29 Sep 2000 18:48:40 +0000 (+0000) Subject: Don't try to serialize references. X-Git-Tag: php-4.0.3RC1~29 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4b89b67d1cfd4e3dc28320335d02b880ee7bf4c8;p=php Don't try to serialize references. Circular references would otherwise kill PHP, as the serializer would overrun the stack. --- 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);