[PHP-CVS] cvs: php-src /ext/standard var.c var_unserializer.c var_unserializer.re /ext/standard/tests/serialize 005.phpt
helly Fri Dec 22 00:47:27 2006 UTC Modified files: /php-src/ext/standard var.c var_unserializer.c var_unserializer.re /php-src/ext/standard/tests/serialize 005.phpt Log: - Make custom serializing work with zstr (as discussed with andrei) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/var.c?r1=1.256&r2=1.257&diff_format=u Index: php-src/ext/standard/var.c diff -u php-src/ext/standard/var.c:1.256 php-src/ext/standard/var.c:1.257 --- php-src/ext/standard/var.c:1.256Thu Dec 21 23:19:48 2006 +++ php-src/ext/standard/var.c Fri Dec 22 00:47:27 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: var.c,v 1.256 2006/12/21 23:19:48 helly Exp $ */ +/* $Id: var.c,v 1.257 2006/12/22 00:47:27 helly Exp $ */ @@ -972,10 +972,12 @@ if(ce && ce->serialize != NULL) { /* has custom handler */ - unsigned char *serialized_data = NULL; + int serialized_type; + zstr serialized_data; zend_uint serialized_length; - if(ce->serialize(struc, &serialized_data, &serialized_length, (zend_serialize_data *)var_hash TSRMLS_CC) == SUCCESS) { + serialized_data.v = NULL; + if(ce->serialize(struc, &serialized_type, &serialized_data, &serialized_length, (zend_serialize_data *)var_hash TSRMLS_CC) == SUCCESS) { smart_str_appendl(buf, "C:", 2); smart_str_append_long(buf, Z_OBJCE_P(struc)->name_length); smart_str_appendl(buf, ":\"", 2); @@ -989,15 +991,21 @@ smart_str_appendl(buf, "\":", 2); smart_str_append_long(buf, serialized_length); - smart_str_appendl(buf, ":{", 2); - /* we need binary or ascii at least not unicode */ - smart_str_appendl(buf, serialized_data, serialized_length); + if (serialized_type == IS_UNICODE) { + smart_str_appendl(buf, ":U:{", 4); + php_var_serialize_ustr(buf, serialized_data.u, serialized_length); + } else if (serialized_type == IS_STRING) { + smart_str_appendl(buf, ":{", 2); + smart_str_appendl(buf, serialized_data.s, serialized_length); + } else { + smart_str_appendc(buf, 'N'); + } smart_str_appendc(buf, '}'); } else { smart_str_appendl(buf, "N;", 2); } - if(serialized_data) { - efree(serialized_data); + if(serialized_data.v) { + efree(serialized_data.v); } return; } http://cvs.php.net/viewvc.cgi/php-src/ext/standard/var_unserializer.c?r1=1.82&r2=1.83&diff_format=u Index: php-src/ext/standard/var_unserializer.c diff -u php-src/ext/standard/var_unserializer.c:1.82 php-src/ext/standard/var_unserializer.c:1.83 --- php-src/ext/standard/var_unserializer.c:1.82Thu Dec 14 23:41:57 2006 +++ php-src/ext/standard/var_unserializer.c Fri Dec 22 00:47:27 2006 @@ -1,4 +1,4 @@ -/* Generated by re2c 0.9.12 on Thu Dec 14 15:32:34 2006 */ +/* Generated by re2c 0.10.2 on Thu Dec 21 19:19:25 2006 */ #line 1 "ext/standard/var_unserializer.re" /* +--+ @@ -18,7 +18,7 @@ +--+ */ -/* $Id: var_unserializer.c,v 1.82 2006/12/14 23:41:57 andrei Exp $ */ +/* $Id: var_unserializer.c,v 1.83 2006/12/22 00:47:27 helly Exp $ */ #include "php.h" #include "ext/standard/php_var.h" @@ -347,6 +347,7 @@ static inline int object_custom(UNSERIALIZE_PARAMETER, zend_class_entry *ce) { long datalen; +
[PHP-CVS] cvs: php-src /ext/standard var.c var_unserializer.c var_unserializer.re
andrei Thu Dec 14 23:41:57 2006 UTC Modified files: /php-src/ext/standard var.c var_unserializer.c var_unserializer.re Log: Use 'S' for escaped binary strings and 's' for non-escaped. http://cvs.php.net/viewvc.cgi/php-src/ext/standard/var.c?r1=1.251&r2=1.252&diff_format=u Index: php-src/ext/standard/var.c diff -u php-src/ext/standard/var.c:1.251 php-src/ext/standard/var.c:1.252 --- php-src/ext/standard/var.c:1.251Fri Dec 8 21:18:16 2006 +++ php-src/ext/standard/var.c Thu Dec 14 23:41:57 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: var.c,v 1.251 2006/12/08 21:18:16 tony2001 Exp $ */ +/* $Id: var.c,v 1.252 2006/12/14 23:41:57 andrei Exp $ */ @@ -718,7 +718,7 @@ unsigned char c; int i; - smart_str_appendl(buf, "s:", 2); + smart_str_appendl(buf, "S:", 2); smart_str_append_long(buf, len); smart_str_appendl(buf, ":\"", 2); http://cvs.php.net/viewvc.cgi/php-src/ext/standard/var_unserializer.c?r1=1.81&r2=1.82&diff_format=u Index: php-src/ext/standard/var_unserializer.c diff -u php-src/ext/standard/var_unserializer.c:1.81 php-src/ext/standard/var_unserializer.c:1.82 --- php-src/ext/standard/var_unserializer.c:1.81Fri Dec 1 19:25:11 2006 +++ php-src/ext/standard/var_unserializer.c Thu Dec 14 23:41:57 2006 @@ -1,4 +1,4 @@ -/* Generated by re2c 0.9.12 on Fri Dec 1 11:18:14 2006 */ +/* Generated by re2c 0.9.12 on Thu Dec 14 15:32:34 2006 */ #line 1 "ext/standard/var_unserializer.re" /* +--+ @@ -18,7 +18,7 @@ +--+ */ -/* $Id: var_unserializer.c,v 1.81 2006/12/01 19:25:11 andrei Exp $ */ +/* $Id: var_unserializer.c,v 1.82 2006/12/14 23:41:57 andrei Exp $ */ #include "php.h" #include "ext/standard/php_var.h" @@ -468,110 +468,115 @@ if((YYLIMIT - YYCURSOR) < 7) YYFILL(7); yych = *YYCURSOR; switch(yych){ - case 'C': case 'O': goto yy13; + case 'C': case 'O': goto yy14; case 'N': goto yy5; case 'R': goto yy2; - case 'U': goto yy10; - case 'a': goto yy11; + case 'S': goto yy10; + case 'U': goto yy11; + case 'a': goto yy12; case 'b': goto yy6; case 'd': goto yy8; case 'i': goto yy7; - case 'o': goto yy12; + case 'o': goto yy13; case 'r': goto yy4; case 's': goto yy9; - case '}': goto yy14; - default:goto yy16; + case '}': goto yy15; + default:goto yy17; } yy2: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == ':') goto yy95; + if(yych == ':') goto yy103; goto yy3; yy3: -#line 725 "ext/standard/var_unserializer.re" +#line 753 "ext/standard/var_unserializer.re" { return 0; } -#line 493 "ext/standard/var_unserializer.c" +#line 494 "ext/standard/var_unserializer.c" yy4: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == ':') goto yy89; + if(yych == ':') goto yy97; goto yy3; yy5: yych = *++YYCURSOR; - if(yych == ';') goto yy87; + if(yych == ';') goto yy95; goto yy3; yy6: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == ':') goto yy83; + if(yych == ':') goto yy91; goto yy3; yy7: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == ':') goto yy77; + if(yych == ':') goto yy85; goto yy3; yy8: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == ':') goto yy53; + if(yych == ':') goto yy61; goto yy3; yy9: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == ':') goto yy46; + if(yych == ':') goto yy54; goto yy3; yy10: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == ':') goto yy39; + if(yych == ':') goto yy47; goto yy3; yy11: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == ':') goto yy32; + if(yych == ':') goto yy40; goto yy3; yy12: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == ':') goto yy25; + if(yych == ':') goto yy33; goto yy3; yy13: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == ':') goto yy17; + if(yych == ':') goto yy26; goto yy3; -yy14: ++YYCURSOR; - goto yy15; -yy15: -#line 719 "ext/standard/var_unserializer.re" +yy14: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if(yych == ':') goto yy18; + goto yy3; +yy15: ++YYCURSOR; + goto yy16; +yy16: +#line 747 "ext/standard/var_unserializer.re" { /* this is the case where we have less da
[PHP-CVS] cvs: php-src /ext/standard var.c var_unserializer.c var_unserializer.re
andrei Fri Dec 1 19:25:11 2006 UTC Modified files: /php-src/ext/standard var.c var_unserializer.c var_unserializer.re Log: Finalize Unicode support in serialize() and unserialize(). http://cvs.php.net/viewvc.cgi/php-src/ext/standard/var.c?r1=1.247&r2=1.248&diff_format=u Index: php-src/ext/standard/var.c diff -u php-src/ext/standard/var.c:1.247 php-src/ext/standard/var.c:1.248 --- php-src/ext/standard/var.c:1.247Mon Oct 9 18:09:42 2006 +++ php-src/ext/standard/var.c Fri Dec 1 19:25:10 2006 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: var.c,v 1.247 2006/10/09 18:09:42 iliaa Exp $ */ +/* $Id: var.c,v 1.248 2006/12/01 19:25:10 andrei Exp $ */ @@ -671,25 +671,40 @@ static inline void php_var_serialize_string(smart_str *buf, char *str, int len) { + static const char hex[] = "0123456789abcdef"; + unsigned char c; + int i; + smart_str_appendl(buf, "s:", 2); smart_str_append_long(buf, len); smart_str_appendl(buf, ":\"", 2); - smart_str_appendl(buf, str, len); + + for (i = 0; i < len; i++) { + c = (unsigned char) str[i]; + if (c < 128 && c != 0x5c /*'\\'*/) { + smart_str_appendc(buf, c & 0xff); + } else { + smart_str_appendc(buf, 0x5c /*'\\'*/); + smart_str_appendc(buf, hex[(c >> 4) & 0xf]); + smart_str_appendc(buf, hex[(c >> 0) & 0xf]); + } + } + smart_str_appendl(buf, "\";", 2); } static inline void php_var_serialize_ustr(smart_str *buf, UChar *ustr, int len) { static const char hex[] = "0123456789abcdef"; - UChar32 c; - int32_t i; + UChar c; + int i; - for(i=0; i> 12) & 0xf]); smart_str_appendc(buf, hex[(c >> 8) & 0xf]); smart_str_appendc(buf, hex[(c >> 4) & 0xf]); @@ -1062,7 +1077,7 @@ /* }}} */ -/* {{{ proto string serialize(mixed variable) +/* {{{ proto string serialize(mixed variable) U Returns a string representation of variable (which can later be unserialized) */ PHP_FUNCTION(serialize) { @@ -1093,22 +1108,20 @@ } /* }}} */ -/* {{{ proto mixed unserialize(string variable_representation) +/* {{{ proto mixed unserialize(string variable_representation) U Takes a string representation of variable and recreates it */ PHP_FUNCTION(unserialize) { - zstr buf; - char *str = NULL; + char *buf = NULL; int buf_len; - zend_uchar buf_type; const unsigned char *p; php_unserialize_data_t var_hash; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "T", - &buf, &buf_len, &buf_type) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s&", + &buf, &buf_len, UG(ascii_conv)) == FAILURE) { RETURN_FALSE; } @@ -1116,34 +1129,15 @@ RETURN_FALSE; } - if (buf_type == IS_UNICODE) { - /* ASCII unicode string to binary string conversion */ - int i; - - str = emalloc(buf_len+1); - for (i = 0; i < buf_len; i++) { - if (buf.u[i] > 128) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Error at offset %d of %d bytes", i, buf_len); - STR_FREE(str); - RETURN_FALSE; - } - str[i] = buf.u[i]; - } - str[i] = '\0'; - buf.s = str; - } - - p = (const unsigned char*)buf.s; + p = (const unsigned char*) buf; PHP_VAR_UNSERIALIZE_INIT(var_hash); if (!php_var_unserialize(&return_value, &p, p + buf_len, &var_hash TSRMLS_CC)) { PHP_VAR_UNSERIALIZE_DESTROY(var_hash); zval_dtor(return_value); - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Error at offset %ld of %d bytes", (long)((char*)p - buf.s), buf_len); - STR_FREE(str); + php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Error at offset %ld of %d bytes", (long)((char*)p - buf), buf_len); RETURN_FALSE; } PHP_VAR_UNSERIALIZE_DESTROY(var_hash); - STR_FREE(str); } /* }}} */ http://cvs.php.net/viewvc.cgi/php-src/ext/standard/var_unserializer.c?r1=1.80&r2=1.81&diff_format=u Index: php-src/ext/standard/var_unserializer.c diff -u php-src/ext/standard/var_unserializer.c:1.80 php-src/ext/standard/var_unserializer.c:1.81 --- php-src/ext/standard/var_unserializer.c:1.80Mon Mar 27 14:19:18 2006 +++ php-src/ext/standard/var_unserializer.c Fri Dec 1 19:25:11 2006 @@ -1,4 +1,4 @@ -/* Gener
[PHP-CVS] cvs: php-src /ext/standard var.c var_unserializer.c var_unserializer.re
dmitry Wed Jun 1 07:03:43 2005 EDT Modified files: /php-src/ext/standard var.c var_unserializer.c var_unserializer.re Log: Fixed bug #30791 (magic methods (__sleep/__wakeup/__toString) call __call if object is overloaded) http://cvs.php.net/diff.php/php-src/ext/standard/var.c?r1=1.198&r2=1.199&ty=u Index: php-src/ext/standard/var.c diff -u php-src/ext/standard/var.c:1.198 php-src/ext/standard/var.c:1.199 --- php-src/ext/standard/var.c:1.198Wed Feb 23 06:17:52 2005 +++ php-src/ext/standard/var.c Wed Jun 1 07:03:42 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: var.c,v 1.198 2005/02/23 11:17:52 stas Exp $ */ +/* $Id: var.c,v 1.199 2005/06/01 11:03:42 dmitry Exp $ */ /* {{{ includes @@ -696,7 +696,8 @@ return; } - if(Z_OBJCE_PP(struc) != PHP_IC_ENTRY) { + if (Z_OBJCE_PP(struc) != PHP_IC_ENTRY && + zend_hash_exists(&Z_OBJCE_PP(struc)->function_table, "__sleep", sizeof("__sleep"))) { INIT_PZVAL(&fname); ZVAL_STRINGL(&fname, "__sleep", sizeof("__sleep") - 1, 0); res = call_user_function_ex(CG(function_table), struc, &fname, http://cvs.php.net/diff.php/php-src/ext/standard/var_unserializer.c?r1=1.64&r2=1.65&ty=u Index: php-src/ext/standard/var_unserializer.c diff -u php-src/ext/standard/var_unserializer.c:1.64 php-src/ext/standard/var_unserializer.c:1.65 --- php-src/ext/standard/var_unserializer.c:1.64Tue May 31 05:41:46 2005 +++ php-src/ext/standard/var_unserializer.c Wed Jun 1 07:03:42 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: var_unserializer.c,v 1.64 2005/05/31 09:41:46 sniper Exp $ */ +/* $Id: var_unserializer.c,v 1.65 2005/06/01 11:03:42 dmitry Exp $ */ #include "php.h" #include "ext/standard/php_var.h" @@ -325,7 +325,8 @@ return 0; } - if(Z_OBJCE_PP(rval) != PHP_IC_ENTRY) { + if (Z_OBJCE_PP(rval) != PHP_IC_ENTRY && + zend_hash_exists(&Z_OBJCE_PP(rval)->function_table, "__wakeup", sizeof("__wakeup"))) { INIT_PZVAL(&fname); ZVAL_STRINGL(&fname, "__wakeup", sizeof("__wakeup") - 1, 0); call_user_function_ex(CG(function_table), rval, &fname, &retval_ptr, 0, 0, 1, NULL TSRMLS_CC); http://cvs.php.net/diff.php/php-src/ext/standard/var_unserializer.re?r1=1.50&r2=1.51&ty=u Index: php-src/ext/standard/var_unserializer.re diff -u php-src/ext/standard/var_unserializer.re:1.50 php-src/ext/standard/var_unserializer.re:1.51 --- php-src/ext/standard/var_unserializer.re:1.50 Tue May 31 05:41:36 2005 +++ php-src/ext/standard/var_unserializer.reWed Jun 1 07:03:42 2005 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: var_unserializer.re,v 1.50 2005/05/31 09:41:36 sniper Exp $ */ +/* $Id: var_unserializer.re,v 1.51 2005/06/01 11:03:42 dmitry Exp $ */ #include "php.h" #include "ext/standard/php_var.h" @@ -329,7 +329,8 @@ return 0; } - if(Z_OBJCE_PP(rval) != PHP_IC_ENTRY) { + if (Z_OBJCE_PP(rval) != PHP_IC_ENTRY && + zend_hash_exists(&Z_OBJCE_PP(rval)->function_table, "__wakeup", sizeof("__wakeup"))) { INIT_PZVAL(&fname); ZVAL_STRINGL(&fname, "__wakeup", sizeof("__wakeup") - 1, 0); call_user_function_ex(CG(function_table), rval, &fname, &retval_ptr, 0, 0, 1, NULL TSRMLS_CC); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/standard var.c var_unserializer.c var_unserializer.re
stasWed Feb 23 06:17:52 2005 EDT Modified files: /php-src/ext/standard var.c var_unserializer.c var_unserializer.re Log: Custom object serializer infrastructure - PHP implementation # The detailed announce on the list will follow http://cvs.php.net/diff.php/php-src/ext/standard/var.c?r1=1.197&r2=1.198&ty=u Index: php-src/ext/standard/var.c diff -u php-src/ext/standard/var.c:1.197 php-src/ext/standard/var.c:1.198 --- php-src/ext/standard/var.c:1.197Fri Dec 17 09:40:39 2004 +++ php-src/ext/standard/var.c Wed Feb 23 06:17:52 2005 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: var.c,v 1.197 2004/12/17 14:40:39 derick Exp $ */ +/* $Id: var.c,v 1.198 2005/02/23 11:17:52 stas Exp $ */ /* {{{ includes @@ -671,6 +671,31 @@ zval fname; int res; + if(Z_OBJCE_PP(struc)->serialize != NULL) { + /* has custom handler */ + unsigned char *serialized_data = NULL; + zend_uint serialized_length; + + if(Z_OBJCE_PP(struc)->serialize(*struc, &serialized_data, &serialized_length, (zend_serialize_data *)var_hash TSRMLS_CC) == SUCCESS) { + smart_str_appendl(buf, "C:", 2); + smart_str_append_long(buf, Z_OBJCE_PP(struc)->name_length); + smart_str_appendl(buf, ":\"", 2); + smart_str_appendl(buf, Z_OBJCE_PP(struc)->name, Z_OBJCE_PP(struc)->name_length); + smart_str_appendl(buf, "\":", 2); + + smart_str_append_long(buf, serialized_length); + smart_str_appendl(buf, ":{", 2); + smart_str_appendl(buf, serialized_data, serialized_length); + smart_str_appendc(buf, '}'); + } else { + smart_str_appendl(buf, "N;", 2); + } + if(serialized_data) { + efree(serialized_data); + } + return; + } + if(Z_OBJCE_PP(struc) != PHP_IC_ENTRY) { INIT_PZVAL(&fname); ZVAL_STRINGL(&fname, "__sleep", sizeof("__sleep") - 1, 0); http://cvs.php.net/diff.php/php-src/ext/standard/var_unserializer.c?r1=1.53&r2=1.54&ty=u Index: php-src/ext/standard/var_unserializer.c diff -u php-src/ext/standard/var_unserializer.c:1.53 php-src/ext/standard/var_unserializer.c:1.54 --- php-src/ext/standard/var_unserializer.c:1.53Mon Feb 14 16:03:09 2005 +++ php-src/ext/standard/var_unserializer.c Wed Feb 23 06:17:52 2005 @@ -1,5 +1,5 @@ -/* Generated by re2c 0.9.4 on Mon Feb 14 21:57:21 2005 */ -#line 1 "/usr/src/php-cvs/ext/standard/var_unserializer.re" +/* Generated by re2c 0.5 on Tue Feb 22 15:14:56 2005 */ +#line 1 "/php5/ext/standard/var_unserializer.re" /* +--+ | PHP Version 5| @@ -18,7 +18,7 @@ +--+ */ -/* $Id: var_unserializer.c,v 1.53 2005/02/14 21:03:09 helly Exp $ */ +/* $Id: var_unserializer.c,v 1.54 2005/02/23 11:17:52 stas Exp $ */ #include "php.h" #include "ext/standard/php_var.h" @@ -147,7 +147,7 @@ #define YYMARKER marker -#line 154 "/usr/src/php-cvs/ext/standard/var_unserializer.re" +#line 155 @@ -277,6 +277,33 @@ return 0; } +static inline int object_custom(UNSERIALIZE_PARAMETER, zend_class_entry *ce) +{ + int datalen; + + if(ce->unserialize == NULL) { + zend_error(E_WARNING, "Class %s has no unserializer", ce->name); + return 0; + } + + datalen = parse_iv2((*p) + 2, p); + + (*p) += 2; + + if((*p) + datalen >= max) { + zend_error(E_WARNING, "Unsifficient data for unserializing - %d required, %d present", datalen, max - (*p)); + return 0; + } + + if(ce->unserialize(rval, *p, datalen, (zend_unserialize_data *)var_hash TSRMLS_CC) != SUCCESS) { + return 0; + } + + (*p) += datalen; + + return finish_nested_data(UNSERIALIZE_PASST
Re: [PHP-CVS] cvs: php-src /ext/standard var.c var_unserializer.c var_unserializer.re
You'll probably want to touch var_unserializer.c and commit it so that people without re2c don't get bitten :-) --Wez. - Original Message - From: "Stanislav Malyshev" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Tuesday, February 03, 2004 2:13 PM Subject: [PHP-CVS] cvs: php-src /ext/standard var.c var_unserializer.c var_unserializer.re > stas Tue Feb 3 09:13:06 2004 EDT > > Modified files: > /php-src/ext/standard var.c var_unserializer.c var_unserializer.re > Log: > fix bug #27120 and bug #25975 - preserve is_ref when bound > objects are serialized > > > -- > PHP CVS Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/standard var.c var_unserializer.c var_unserializer.re
stasTue Feb 3 09:13:06 2004 EDT Modified files: /php-src/ext/standard var.c var_unserializer.c var_unserializer.re Log: fix bug #27120 and bug #25975 - preserve is_ref when bound objects are serialized http://cvs.php.net/diff.php/php-src/ext/standard/var.c?r1=1.180&r2=1.181&ty=u Index: php-src/ext/standard/var.c diff -u php-src/ext/standard/var.c:1.180 php-src/ext/standard/var.c:1.181 --- php-src/ext/standard/var.c:1.180Thu Jan 8 03:17:35 2004 +++ php-src/ext/standard/var.c Tue Feb 3 09:12:58 2004 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: var.c,v 1.180 2004/01/08 08:17:35 andi Exp $ */ +/* $Id: var.c,v 1.181 2004/02/03 14:12:58 stas Exp $ */ /* {{{ includes @@ -549,11 +549,16 @@ HashTable *myht; if(var_hash - && php_add_var_hash(var_hash, *struc, (void *) &var_already) == FAILURE - && ((*struc)->is_ref || Z_TYPE_PP(struc) == IS_OBJECT)) { - smart_str_appendl(buf, "R:", 2); - smart_str_append_long(buf, *var_already); - smart_str_appendc(buf, ';'); + && php_add_var_hash(var_hash, *struc, (void *) &var_already) == FAILURE) { + if((*struc)->is_ref) { + smart_str_appendl(buf, "R:", 2); + smart_str_append_long(buf, *var_already); + smart_str_appendc(buf, ';'); + } else if(Z_TYPE_PP(struc) == IS_OBJECT) { + smart_str_appendl(buf, "r:", 2); + smart_str_append_long(buf, *var_already); + smart_str_appendc(buf, ';'); + } return; } http://cvs.php.net/diff.php/php-src/ext/standard/var_unserializer.c?r1=1.33&r2=1.34&ty=u Index: php-src/ext/standard/var_unserializer.c diff -u php-src/ext/standard/var_unserializer.c:1.33 php-src/ext/standard/var_unserializer.c:1.34 --- php-src/ext/standard/var_unserializer.c:1.33Thu Jan 8 14:17:50 2004 +++ php-src/ext/standard/var_unserializer.c Tue Feb 3 09:12:59 2004 @@ -1,5 +1,5 @@ -/* Generated by re2c 0.5 on Thu Jan 8 20:25:56 2004 */ -#line 1 "/usr/src/web/php/php5/ext/standard/var_unserializer.re" +/* Generated by re2c 0.5 on Tue Feb 3 16:01:43 2004 */ +#line 1 "var_unserializer.re" /* +--+ | PHP Version 5| @@ -18,7 +18,7 @@ +--+ */ -/* $Id: var_unserializer.c,v 1.33 2004/01/08 19:17:50 sniper Exp $ */ +/* $Id: var_unserializer.c,v 1.34 2004/02/03 14:12:59 stas Exp $ */ #include "php.h" #include "ext/standard/php_var.h" @@ -297,39 +297,40 @@ if(yych <= 'd'){ if(yych <= 'R'){ if(yych <= 'N'){ - if(yych <= 'M') goto yy15; - goto yy5; + if(yych <= 'M') goto yy16; + goto yy6; } else { - if(yych <= 'O') goto yy12; - if(yych <= 'Q') goto yy15; + if(yych <= 'O') goto yy13; + if(yych <= 'Q') goto yy16; goto yy3; } } else { if(yych <= 'a'){ - if(yych <= '`') goto yy15; - goto yy10; + if(yych <= '`') goto yy16; + goto yy11; } else { - if(yych <= 'b') goto yy6; - if(yych <= 'c') goto yy15; - goto yy8; + if(yych <= 'b') goto yy7; + if(yych <= 'c') goto yy16; + goto yy9; } } } else { - if(yych <= 'r'){ + if(yych <= 'q'){ if(yych <= 'i'){ - if(yych <= 'h') goto yy15; - goto yy7; + if(yych <= 'h') goto yy16; + goto yy8; } else { - if(yych == 'o') goto yy11; - goto yy15; + if(yych == 'o') goto yy12; + goto yy16; } } else { if(yych <= '|'){ - if(yych <= 's') goto yy9; - goto yy15; + if(yych <= 'r') goto yy5; +