dmitry          Mon Apr 11 07:58:21 2005 EDT

  Modified files:              
    /php-src/ext/wddx   wddx.c 
  Log:
  Fixed SIGSEGV on serializing data with circular references 
  
  
http://cvs.php.net/diff.php/php-src/ext/wddx/wddx.c?r1=1.115&r2=1.116&ty=u
Index: php-src/ext/wddx/wddx.c
diff -u php-src/ext/wddx/wddx.c:1.115 php-src/ext/wddx/wddx.c:1.116
--- php-src/ext/wddx/wddx.c:1.115       Mon Apr 11 05:27:47 2005
+++ php-src/ext/wddx/wddx.c     Mon Apr 11 07:58:19 2005
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: wddx.c,v 1.115 2005/04/11 09:27:47 dmitry Exp $ */
+/* $Id: wddx.c,v 1.116 2005/04/11 11:58:19 dmitry Exp $ */
 
 #include "php.h"
 
@@ -620,6 +620,7 @@
        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 @@
                        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;
        }
        

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to