Diff for /embedaddon/php/ext/standard/var.c between versions 1.1 and 1.1.1.4

version 1.1, 2012/02/21 23:48:02 version 1.1.1.4, 2014/06/15 20:03:57
Line 2 Line 2
    +----------------------------------------------------------------------+     +----------------------------------------------------------------------+
    | PHP Version 5                                                        |     | PHP Version 5                                                        |
    +----------------------------------------------------------------------+     +----------------------------------------------------------------------+
   | Copyright (c) 1997-2012 The PHP Group                                |   | Copyright (c) 1997-2014 The PHP Group                                |
    +----------------------------------------------------------------------+     +----------------------------------------------------------------------+
    | This source file is subject to version 3.01 of the PHP license,      |     | This source file is subject to version 3.01 of the PHP license,      |
    | that is bundled with this package in the file LICENSE, and is        |     | that is bundled with this package in the file LICENSE, and is        |
Line 12 Line 12
    | obtain it through the world-wide-web, please send a note to          |     | obtain it through the world-wide-web, please send a note to          |
    | license@php.net so we can mail you a copy immediately.               |     | license@php.net so we can mail you a copy immediately.               |
    +----------------------------------------------------------------------+     +----------------------------------------------------------------------+
   | Authors: Jani Lehtimäki <jkl@njet.net>                               |   | Authors: Jani Lehtimäki <jkl@njet.net>                               |
    |          Thies C. Arntzen <thies@thieso.net>                         |     |          Thies C. Arntzen <thies@thieso.net>                         |
    |          Sascha Schumann <sascha@schumann.cx>                        |     |          Sascha Schumann <sascha@schumann.cx>                        |
    +----------------------------------------------------------------------+     +----------------------------------------------------------------------+
Line 56  static int php_array_element_dump(zval **zv TSRMLS_DC, Line 56  static int php_array_element_dump(zval **zv TSRMLS_DC,
 static int php_object_property_dump(zval **zv TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key) /* {{{ */  static int php_object_property_dump(zval **zv TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key) /* {{{ */
 {  {
         int level;          int level;
        char *prop_name, *class_name;        const char *prop_name, *class_name;
   
         level = va_arg(args, int);          level = va_arg(args, int);
   
Line 87  static int php_object_property_dump(zval **zv TSRMLS_D Line 87  static int php_object_property_dump(zval **zv TSRMLS_D
 PHPAPI void php_var_dump(zval **struc, int level TSRMLS_DC) /* {{{ */  PHPAPI void php_var_dump(zval **struc, int level TSRMLS_DC) /* {{{ */
 {  {
         HashTable *myht;          HashTable *myht;
        char *class_name;        const char *class_name;
         zend_uint class_name_len;          zend_uint class_name_len;
         int (*php_element_dump_func)(zval** TSRMLS_DC, int, va_list, zend_hash_key*);          int (*php_element_dump_func)(zval** TSRMLS_DC, int, va_list, zend_hash_key*);
         int is_temp;          int is_temp;
Line 133  PHPAPI void php_var_dump(zval **struc, int level TSRML Line 133  PHPAPI void php_var_dump(zval **struc, int level TSRML
                         return;                          return;
                 }                  }
   
                Z_OBJ_HANDLER(**struc, get_class_name)(*struc, &class_name, &class_name_len, 0 TSRMLS_CC);                if (Z_OBJ_HANDLER(**struc, get_class_name)) {
                php_printf("%sobject(%s)#%d (%d) {\n", COMMON, class_name, Z_OBJ_HANDLE_PP(struc), myht ? zend_hash_num_elements(myht) : 0);                        Z_OBJ_HANDLER(**struc, get_class_name)(*struc, &class_name, &class_name_len, 0 TSRMLS_CC);
                efree(class_name);                        php_printf("%sobject(%s)#%d (%d) {\n", COMMON, class_name, Z_OBJ_HANDLE_PP(struc), myht ? zend_hash_num_elements(myht) : 0);
                         efree((char*)class_name);
                 } else {
                         php_printf("%sobject(unknown class)#%d (%d) {\n", COMMON, Z_OBJ_HANDLE_PP(struc), myht ? zend_hash_num_elements(myht) : 0);
                 }
                 php_element_dump_func = php_object_property_dump;                  php_element_dump_func = php_object_property_dump;
 head_done:  head_done:
                 if (myht) {                  if (myht) {
Line 152  head_done: Line 156  head_done:
                 PUTS("}\n");                  PUTS("}\n");
                 break;                  break;
         case IS_RESOURCE: {          case IS_RESOURCE: {
                char *type_name;                const char *type_name = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(struc) TSRMLS_CC);
 
                type_name = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(struc) TSRMLS_CC); 
                 php_printf("%sresource(%ld) of type (%s)\n", COMMON, Z_LVAL_PP(struc), type_name ? type_name : "Unknown");                  php_printf("%sresource(%ld) of type (%s)\n", COMMON, Z_LVAL_PP(struc), type_name ? type_name : "Unknown");
                 break;                  break;
         }          }
Line 211  static int zval_array_element_dump(zval **zv TSRMLS_DC Line 213  static int zval_array_element_dump(zval **zv TSRMLS_DC
 static int zval_object_property_dump(zval **zv TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key) /* {{{ */  static int zval_object_property_dump(zval **zv TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key) /* {{{ */
 {  {
         int level;          int level;
        char *prop_name, *class_name;        const char *prop_name, *class_name;
   
         level = va_arg(args, int);          level = va_arg(args, int);
   
Line 240  static int zval_object_property_dump(zval **zv TSRMLS_ Line 242  static int zval_object_property_dump(zval **zv TSRMLS_
 PHPAPI void php_debug_zval_dump(zval **struc, int level TSRMLS_DC) /* {{{ */  PHPAPI void php_debug_zval_dump(zval **struc, int level TSRMLS_DC) /* {{{ */
 {  {
         HashTable *myht = NULL;          HashTable *myht = NULL;
        char *class_name;        const char *class_name;
         zend_uint class_name_len;          zend_uint class_name_len;
         int (*zval_element_dump_func)(zval** TSRMLS_DC, int, va_list, zend_hash_key*);          int (*zval_element_dump_func)(zval** TSRMLS_DC, int, va_list, zend_hash_key*);
         int is_temp = 0;          int is_temp = 0;
Line 282  PHPAPI void php_debug_zval_dump(zval **struc, int leve Line 284  PHPAPI void php_debug_zval_dump(zval **struc, int leve
                         PUTS("*RECURSION*\n");                          PUTS("*RECURSION*\n");
                         return;                          return;
                 }                  }
                if (Z_OBJ_HANDLER_PP(struc, get_class_name)) {                Z_OBJ_HANDLER_PP(struc, get_class_name)(*struc, &class_name, &class_name_len, 0 TSRMLS_CC);
                        Z_OBJ_HANDLER_PP(struc, get_class_name)(*struc, &class_name, &class_name_len, 0 TSRMLS_CC);                php_printf("%sobject(%s)#%d (%d) refcount(%u){\n", COMMON, class_name, Z_OBJ_HANDLE_PP(struc), myht ? zend_hash_num_elements(myht) : 0, Z_REFCOUNT_PP(struc));
                        php_printf("%sobject(%s)#%d (%d) refcount(%u){\n", COMMON, class_name, Z_OBJ_HANDLE_PP(struc), myht ? zend_hash_num_elements(myht) : 0, Z_REFCOUNT_PP(struc));                efree((char*)class_name);
                        efree(class_name); 
                } else { 
                        php_printf("%sobject(unknown class)#%d (%d) refcount(%u){\n", COMMON, Z_OBJ_HANDLE_PP(struc), myht ? zend_hash_num_elements(myht) : 0, Z_REFCOUNT_PP(struc)); 
                } 
                 zval_element_dump_func = zval_object_property_dump;                  zval_element_dump_func = zval_object_property_dump;
 head_done:  head_done:
                 if (myht) {                  if (myht) {
Line 304  head_done: Line 302  head_done:
                 PUTS("}\n");                  PUTS("}\n");
                 break;                  break;
         case IS_RESOURCE: {          case IS_RESOURCE: {
                char *type_name;                const char *type_name = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(struc) TSRMLS_CC);
 
                type_name = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(struc) TSRMLS_CC); 
                 php_printf("%sresource(%ld) of type (%s) refcount(%u)\n", COMMON, Z_LVAL_PP(struc), type_name ? type_name : "Unknown", Z_REFCOUNT_PP(struc));                  php_printf("%sresource(%ld) of type (%s) refcount(%u)\n", COMMON, Z_LVAL_PP(struc), type_name ? type_name : "Unknown", Z_REFCOUNT_PP(struc));
                 break;                  break;
         }          }
Line 357  static int php_array_element_export(zval **zv TSRMLS_D Line 353  static int php_array_element_export(zval **zv TSRMLS_D
                 buffer_append_spaces(buf, level+1);                  buffer_append_spaces(buf, level+1);
                 smart_str_append_long(buf, (long) hash_key->h);                  smart_str_append_long(buf, (long) hash_key->h);
                 smart_str_appendl(buf, " => ", 4);                  smart_str_appendl(buf, " => ", 4);
   
         } else { /* string key */          } else { /* string key */
                 char *key, *tmp_str;                  char *key, *tmp_str;
                 int key_len, tmp_len;                  int key_len, tmp_len;
Line 376  static int php_array_element_export(zval **zv TSRMLS_D Line 373  static int php_array_element_export(zval **zv TSRMLS_D
   
         smart_str_appendc(buf, ',');          smart_str_appendc(buf, ',');
         smart_str_appendc(buf, '\n');          smart_str_appendc(buf, '\n');
        
         return 0;          return 0;
 }  }
 /* }}} */  /* }}} */
Line 391  static int php_object_element_export(zval **zv TSRMLS_ Line 388  static int php_object_element_export(zval **zv TSRMLS_
   
         buffer_append_spaces(buf, level + 2);          buffer_append_spaces(buf, level + 2);
         if (hash_key->nKeyLength != 0) {          if (hash_key->nKeyLength != 0) {
                char *class_name, /* ignored, but must be passed to unmangle */                const char *class_name; /* ignored, but must be passed to unmangle */
                         *pname,                const char *pname;
                         *pname_esc;                char *pname_esc;
                 int  pname_esc_len;                  int  pname_esc_len;
                                   
                 zend_unmangle_property_name(hash_key->arKey, hash_key->nKeyLength - 1,                  zend_unmangle_property_name(hash_key->arKey, hash_key->nKeyLength - 1,
Line 406  static int php_object_element_export(zval **zv TSRMLS_ Line 403  static int php_object_element_export(zval **zv TSRMLS_
                 smart_str_appendc(buf, '\'');                  smart_str_appendc(buf, '\'');
                 efree(pname_esc);                  efree(pname_esc);
         } else {          } else {
                smart_str_append_long(buf, hash_key->h);                smart_str_append_long(buf, (long) hash_key->h);
         }          }
   
         smart_str_appendl(buf, " => ", 4);          smart_str_appendl(buf, " => ", 4);
         php_var_export_ex(zv, level + 2, buf TSRMLS_CC);          php_var_export_ex(zv, level + 2, buf TSRMLS_CC);
         smart_str_appendc(buf, ',');          smart_str_appendc(buf, ',');
         smart_str_appendc(buf, '\n');          smart_str_appendc(buf, '\n');
   
         return 0;          return 0;
 }  }
 /* }}} */  /* }}} */
Line 423  PHPAPI void php_var_export_ex(zval **struc, int level, Line 418  PHPAPI void php_var_export_ex(zval **struc, int level,
         HashTable *myht;          HashTable *myht;
         char *tmp_str, *tmp_str2;          char *tmp_str, *tmp_str2;
         int tmp_len, tmp_len2;          int tmp_len, tmp_len2;
        char *class_name;        const char *class_name;
         zend_uint class_name_len;          zend_uint class_name_len;
   
         switch (Z_TYPE_PP(struc)) {          switch (Z_TYPE_PP(struc)) {
         case IS_BOOL:          case IS_BOOL:
        if (Z_LVAL_PP(struc)) {                if (Z_LVAL_PP(struc)) {
                smart_str_appendl(buf, "true", 4);                        smart_str_appendl(buf, "true", 4);
        } else {                } else {
                smart_str_appendl(buf, "false", 5);                        smart_str_appendl(buf, "false", 5);
        }                }
                 break;                  break;
         case IS_NULL:          case IS_NULL:
                 smart_str_appendl(buf, "NULL", 4);                  smart_str_appendl(buf, "NULL", 4);
Line 441  PHPAPI void php_var_export_ex(zval **struc, int level, Line 436  PHPAPI void php_var_export_ex(zval **struc, int level,
                 smart_str_append_long(buf, Z_LVAL_PP(struc));                  smart_str_append_long(buf, Z_LVAL_PP(struc));
                 break;                  break;
         case IS_DOUBLE:          case IS_DOUBLE:
                tmp_len = spprintf(&tmp_str, 0,"%.*H", (int) EG(precision), Z_DVAL_PP(struc));                tmp_len = spprintf(&tmp_str, 0,"%.*H", PG(serialize_precision), Z_DVAL_PP(struc));
                 smart_str_appendl(buf, tmp_str, tmp_len);                  smart_str_appendl(buf, tmp_str, tmp_len);
                 efree(tmp_str);                  efree(tmp_str);
                 break;                  break;
Line 458  PHPAPI void php_var_export_ex(zval **struc, int level, Line 453  PHPAPI void php_var_export_ex(zval **struc, int level,
                 break;                  break;
         case IS_ARRAY:          case IS_ARRAY:
                 myht = Z_ARRVAL_PP(struc);                  myht = Z_ARRVAL_PP(struc);
                   if(myht && myht->nApplyCount > 0){
                           smart_str_appendl(buf, "NULL", 4);
                           zend_error(E_WARNING, "var_export does not handle circular references");
                           return;
                   }
                 if (level > 1) {                  if (level > 1) {
                         smart_str_appendc(buf, '\n');                          smart_str_appendc(buf, '\n');
                         buffer_append_spaces(buf, level - 1);                          buffer_append_spaces(buf, level - 1);
Line 469  PHPAPI void php_var_export_ex(zval **struc, int level, Line 469  PHPAPI void php_var_export_ex(zval **struc, int level,
                         buffer_append_spaces(buf, level - 1);                          buffer_append_spaces(buf, level - 1);
                 }                  }
                 smart_str_appendc(buf, ')');                  smart_str_appendc(buf, ')');
    
                 break;                  break;
   
         case IS_OBJECT:          case IS_OBJECT:
                 myht = Z_OBJPROP_PP(struc);                  myht = Z_OBJPROP_PP(struc);
                   if(myht && myht->nApplyCount > 0){
                           smart_str_appendl(buf, "NULL", 4);
                           zend_error(E_WARNING, "var_export does not handle circular references");
                           return;
                   }
                 if (level > 1) {                  if (level > 1) {
                         smart_str_appendc(buf, '\n');                          smart_str_appendc(buf, '\n');
                         buffer_append_spaces(buf, level - 1);                          buffer_append_spaces(buf, level - 1);
Line 482  PHPAPI void php_var_export_ex(zval **struc, int level, Line 488  PHPAPI void php_var_export_ex(zval **struc, int level,
                 smart_str_appendl(buf, class_name, class_name_len);                  smart_str_appendl(buf, class_name, class_name_len);
                 smart_str_appendl(buf, "::__set_state(array(\n", 21);                  smart_str_appendl(buf, "::__set_state(array(\n", 21);
   
                efree(class_name);                efree((char*)class_name);
                 if (myht) {                  if (myht) {
                        zend_hash_apply_with_arguments(myht TSRMLS_CC, (apply_func_args_t) php_object_element_export, 2, level, buf);                        zend_hash_apply_with_arguments(myht TSRMLS_CC, (apply_func_args_t) php_object_element_export, 1, level, buf);
                 }                  }
                 if (level > 1) {                  if (level > 1) {
                         buffer_append_spaces(buf, level - 1);                          buffer_append_spaces(buf, level - 1);
Line 510  PHPAPI void php_var_export(zval **struc, int level TSR Line 516  PHPAPI void php_var_export(zval **struc, int level TSR
 }  }
 /* }}} */  /* }}} */
   
   
 /* {{{ proto mixed var_export(mixed var [, bool return])  /* {{{ proto mixed var_export(mixed var [, bool return])
    Outputs or returns a string representation of a variable */     Outputs or returns a string representation of a variable */
 PHP_FUNCTION(var_export)  PHP_FUNCTION(var_export)
Line 542  static inline int php_add_var_hash(HashTable *var_hash Line 549  static inline int php_add_var_hash(HashTable *var_hash
         char id[32], *p;          char id[32], *p;
         register int len;          register int len;
   
         /* relies on "(long)" being a perfect hash function for data pointers,  
          * however the actual identity of an object has had to be determined  
          * by its object handle and the class entry since 5.0. */  
         if ((Z_TYPE_P(var) == IS_OBJECT) && Z_OBJ_HT_P(var)->get_class_entry) {          if ((Z_TYPE_P(var) == IS_OBJECT) && Z_OBJ_HT_P(var)->get_class_entry) {
                 p = smart_str_print_long(id + sizeof(id) - 1,                  p = smart_str_print_long(id + sizeof(id) - 1,
                                (((size_t)Z_OBJCE_P(var) << 5)                                (long) zend_objects_get_address(var TSRMLS_CC));
                                | ((size_t)Z_OBJCE_P(var) >> (sizeof(long) * 8 - 5))) 
                                + (long) Z_OBJ_HANDLE_P(var)); 
                 *(--p) = 'O';                  *(--p) = 'O';
                 len = id + sizeof(id) - 1 - p;                  len = id + sizeof(id) - 1 - p;
         } else {          } else {
Line 564  static inline int php_add_var_hash(HashTable *var_hash Line 566  static inline int php_add_var_hash(HashTable *var_hash
                         var_no = -1;                          var_no = -1;
                         zend_hash_next_index_insert(var_hash, &var_no, sizeof(var_no), NULL);                          zend_hash_next_index_insert(var_hash, &var_no, sizeof(var_no), NULL);
                 }                  }
   #if 0
                   fprintf(stderr, "- had var (%d): %lu\n", Z_TYPE_P(var), **(ulong**)var_old);
   #endif
                 return FAILURE;                  return FAILURE;
         }          }
   
         /* +1 because otherwise hash will think we are trying to store NULL pointer */          /* +1 because otherwise hash will think we are trying to store NULL pointer */
         var_no = zend_hash_num_elements(var_hash) + 1;          var_no = zend_hash_num_elements(var_hash) + 1;
         zend_hash_add(var_hash, p, len, &var_no, sizeof(var_no), NULL);          zend_hash_add(var_hash, p, len, &var_no, sizeof(var_no), NULL);
   #if 0
           fprintf(stderr, "+ add var (%d): %lu\n", Z_TYPE_P(var), var_no);
   #endif
         return SUCCESS;          return SUCCESS;
 }  }
 /* }}} */  /* }}} */
Line 629  static void php_var_serialize_class(smart_str *buf, zv Line 637  static void php_var_serialize_class(smart_str *buf, zv
                 HashPosition pos;                  HashPosition pos;
                 int i;                  int i;
                 zval nval, *nvalp;                  zval nval, *nvalp;
                   HashTable *propers;
   
                 ZVAL_NULL(&nval);                  ZVAL_NULL(&nval);
                 nvalp = &nval;                  nvalp = &nval;
Line 654  static void php_var_serialize_class(smart_str *buf, zv Line 663  static void php_var_serialize_class(smart_str *buf, zv
                                 smart_str_appendl(buf,"N;", 2);                                  smart_str_appendl(buf,"N;", 2);
                                 continue;                                  continue;
                         }                          }
                        if (zend_hash_find(Z_OBJPROP_P(struc), Z_STRVAL_PP(name), Z_STRLEN_PP(name) + 1, (void *) &d) == SUCCESS) {                        propers = Z_OBJPROP_P(struc);
                         if (zend_hash_find(propers, Z_STRVAL_PP(name), Z_STRLEN_PP(name) + 1, (void *) &d) == SUCCESS) {
                                 php_var_serialize_string(buf, Z_STRVAL_PP(name), Z_STRLEN_PP(name));                                  php_var_serialize_string(buf, Z_STRVAL_PP(name), Z_STRLEN_PP(name));
                                 php_var_serialize_intern(buf, *d, var_hash TSRMLS_CC);                                  php_var_serialize_intern(buf, *d, var_hash TSRMLS_CC);
                         } else {                          } else {
Line 666  static void php_var_serialize_class(smart_str *buf, zv Line 676  static void php_var_serialize_class(smart_str *buf, zv
   
                                         do {                                          do {
                                                 zend_mangle_property_name(&priv_name, &prop_name_length, ce->name, ce->name_length, Z_STRVAL_PP(name), Z_STRLEN_PP(name), ce->type & ZEND_INTERNAL_CLASS);                                                  zend_mangle_property_name(&priv_name, &prop_name_length, ce->name, ce->name_length, Z_STRVAL_PP(name), Z_STRLEN_PP(name), ce->type & ZEND_INTERNAL_CLASS);
                                                if (zend_hash_find(Z_OBJPROP_P(struc), priv_name, prop_name_length + 1, (void *) &d) == SUCCESS) {                                                if (zend_hash_find(propers, priv_name, prop_name_length + 1, (void *) &d) == SUCCESS) {
                                                         php_var_serialize_string(buf, priv_name, prop_name_length);                                                          php_var_serialize_string(buf, priv_name, prop_name_length);
                                                         pefree(priv_name, ce->type & ZEND_INTERNAL_CLASS);                                                          pefree(priv_name, ce->type & ZEND_INTERNAL_CLASS);
                                                         php_var_serialize_intern(buf, *d, var_hash TSRMLS_CC);                                                          php_var_serialize_intern(buf, *d, var_hash TSRMLS_CC);
Line 674  static void php_var_serialize_class(smart_str *buf, zv Line 684  static void php_var_serialize_class(smart_str *buf, zv
                                                 }                                                  }
                                                 pefree(priv_name, ce->type & ZEND_INTERNAL_CLASS);                                                  pefree(priv_name, ce->type & ZEND_INTERNAL_CLASS);
                                                 zend_mangle_property_name(&prot_name, &prop_name_length, "*", 1, Z_STRVAL_PP(name), Z_STRLEN_PP(name), ce->type & ZEND_INTERNAL_CLASS);                                                  zend_mangle_property_name(&prot_name, &prop_name_length, "*", 1, Z_STRVAL_PP(name), Z_STRLEN_PP(name), ce->type & ZEND_INTERNAL_CLASS);
                                                if (zend_hash_find(Z_OBJPROP_P(struc), prot_name, prop_name_length + 1, (void *) &d) == SUCCESS) {                                                if (zend_hash_find(propers, prot_name, prop_name_length + 1, (void *) &d) == SUCCESS) {
                                                         php_var_serialize_string(buf, prot_name, prop_name_length);                                                          php_var_serialize_string(buf, prot_name, prop_name_length);
                                                         pefree(prot_name, ce->type & ZEND_INTERNAL_CLASS);                                                          pefree(prot_name, ce->type & ZEND_INTERNAL_CLASS);
                                                         php_var_serialize_intern(buf, *d, var_hash TSRMLS_CC);                                                          php_var_serialize_intern(buf, *d, var_hash TSRMLS_CC);
Line 702  static void php_var_serialize_intern(smart_str *buf, z Line 712  static void php_var_serialize_intern(smart_str *buf, z
         ulong *var_already;          ulong *var_already;
         HashTable *myht;          HashTable *myht;
   
           if (EG(exception)) {
                   return;
           }
   
         if (var_hash && php_add_var_hash(var_hash, struc, (void *) &var_already TSRMLS_CC) == FAILURE) {          if (var_hash && php_add_var_hash(var_hash, struc, (void *) &var_already TSRMLS_CC) == FAILURE) {
                 if (Z_ISREF_P(struc)) {                  if (Z_ISREF_P(struc)) {
                         smart_str_appendl(buf, "R:", 2);                          smart_str_appendl(buf, "R:", 2);
Line 785  static void php_var_serialize_intern(smart_str *buf, z Line 799  static void php_var_serialize_intern(smart_str *buf, z
                                 if (ce && ce != PHP_IC_ENTRY && zend_hash_exists(&ce->function_table, "__sleep", sizeof("__sleep"))) {                                  if (ce && ce != PHP_IC_ENTRY && zend_hash_exists(&ce->function_table, "__sleep", sizeof("__sleep"))) {
                                         INIT_PZVAL(&fname);                                          INIT_PZVAL(&fname);
                                         ZVAL_STRINGL(&fname, "__sleep", sizeof("__sleep") - 1, 0);                                          ZVAL_STRINGL(&fname, "__sleep", sizeof("__sleep") - 1, 0);
                                           BG(serialize_lock)++;
                                         res = call_user_function_ex(CG(function_table), &struc, &fname, &retval_ptr, 0, 0, 1, NULL TSRMLS_CC);                                          res = call_user_function_ex(CG(function_table), &struc, &fname, &retval_ptr, 0, 0, 1, NULL TSRMLS_CC);
                                           BG(serialize_lock)--;
                       
                                           if (EG(exception)) {
                                                   if (retval_ptr) {
                                                           zval_ptr_dtor(&retval_ptr);
                                                   }
                                                   return;
                                           }
   
                                        if (res == SUCCESS && !EG(exception)) {                                        if (res == SUCCESS) {
                                                 if (retval_ptr) {                                                  if (retval_ptr) {
                                                         if (HASH_OF(retval_ptr)) {                                                          if (HASH_OF(retval_ptr)) {
                                                                 php_var_serialize_class(buf, struc, retval_ptr, var_hash TSRMLS_CC);                                                                  php_var_serialize_class(buf, struc, retval_ptr, var_hash TSRMLS_CC);
Line 880  static void php_var_serialize_intern(smart_str *buf, z Line 903  static void php_var_serialize_intern(smart_str *buf, z
 }  }
 /* }}} */  /* }}} */
   
PHPAPI void php_var_serialize(smart_str *buf, zval **struc, HashTable *var_hash TSRMLS_DC) /* {{{ */PHPAPI void php_var_serialize(smart_str *buf, zval **struc, php_serialize_data_t *var_hash TSRMLS_DC) /* {{{ */
 {  {
        php_var_serialize_intern(buf, *struc, var_hash TSRMLS_CC);        php_var_serialize_intern(buf, *struc, *var_hash TSRMLS_CC);
         smart_str_0(buf);          smart_str_0(buf);
 }  }
 /* }}} */  /* }}} */
Line 907  PHP_FUNCTION(serialize) Line 930  PHP_FUNCTION(serialize)
         php_var_serialize(&buf, struc, &var_hash TSRMLS_CC);          php_var_serialize(&buf, struc, &var_hash TSRMLS_CC);
         PHP_VAR_SERIALIZE_DESTROY(var_hash);          PHP_VAR_SERIALIZE_DESTROY(var_hash);
   
           if (EG(exception)) {
                   smart_str_free(&buf);
                   RETURN_FALSE;
           }
   
         if (buf.c) {          if (buf.c) {
                 RETURN_STRINGL(buf.c, buf.len, 0);                  RETURN_STRINGL(buf.c, buf.len, 0);
         } else {          } else {
Line 937  PHP_FUNCTION(unserialize) Line 965  PHP_FUNCTION(unserialize)
         if (!php_var_unserialize(&return_value, &p, p + buf_len, &var_hash TSRMLS_CC)) {          if (!php_var_unserialize(&return_value, &p, p + buf_len, &var_hash TSRMLS_CC)) {
                 PHP_VAR_UNSERIALIZE_DESTROY(var_hash);                  PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
                 zval_dtor(return_value);                  zval_dtor(return_value);
                php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Error at offset %ld of %d bytes", (long)((char*)p - buf), buf_len);                if (!EG(exception)) {
                         php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Error at offset %ld of %d bytes", (long)((char*)p - buf), buf_len);
                 }
                 RETURN_FALSE;                  RETURN_FALSE;
         }          }
         PHP_VAR_UNSERIALIZE_DESTROY(var_hash);          PHP_VAR_UNSERIALIZE_DESTROY(var_hash);

Removed from v.1.1  
changed lines
  Added in v.1.1.1.4


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>