[PHP-CVS] cvs: php-src /ext/standard var.c var_unserializer.c var_unserializer.re /ext/standard/tests/serialize 005.phpt

2006-12-21 Thread Marcus Boerger
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

2006-12-14 Thread Andrei Zmievski
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

2006-12-01 Thread Andrei Zmievski
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

2005-06-01 Thread Dmitry Stogov
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

2005-02-23 Thread Stanislav Malyshev
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

2004-02-03 Thread Wez Furlong
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

2004-02-03 Thread Stanislav Malyshev
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;
+