From: Dmitry Stogov Date: Mon, 11 Apr 2005 11:58:36 +0000 (+0000) Subject: Fixed SIGSEGV on serializing data with circular references X-Git-Tag: php-5.0.5RC1~449 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5efebee28a37d2886f6e8157be21af790d8dd7ca;p=php Fixed SIGSEGV on serializing data with circular references --- diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c index a0ceb52842..d0451ad5f6 100644 --- a/ext/wddx/wddx.c +++ b/ext/wddx/wddx.c @@ -620,6 +620,7 @@ void php_wddx_serialize_var(wddx_packet *packet, zval *var, char *name, int name char tmp_buf[WDDX_BUF_LEN]; char *name_esc; int name_esc_len; + HashTable *ht; if (name) { name_esc = php_escape_html_entities(name, name_len, &name_esc_len, 0, ENT_QUOTES, NULL TSRMLS_CC); @@ -647,11 +648,25 @@ void php_wddx_serialize_var(wddx_packet *packet, zval *var, char *name, int name break; case IS_ARRAY: + ht = Z_ARRVAL_P(var); + if (ht->nApplyCount > 1) { + php_error_docref(NULL TSRMLS_CC, E_ERROR, "WDDX doesn't support circular references"); + return; + } + ht->nApplyCount++; php_wddx_serialize_array(packet, var); + ht->nApplyCount--; break; case IS_OBJECT: - php_wddx_serialize_object(packet, var); + ht = Z_OBJPROP_P(var); + if (ht->nApplyCount > 1) { + php_error_docref(NULL TSRMLS_CC, E_ERROR, "WDDX doesn't support circular references"); + return; + } + ht->nApplyCount++; + php_wddx_serialize_object(packet, var); + ht->nApplyCount--; break; }