dmitry Mon Jul 9 15:58:52 2007 UTC Modified files: /php-src/ext/standard var_unserializer.c var_unserializer.re Log: Fixed custom unserialixe() in unicode mode http://cvs.php.net/viewvc.cgi/php-src/ext/standard/var_unserializer.c?r1=1.88&r2=1.89&diff_format=u Index: php-src/ext/standard/var_unserializer.c diff -u php-src/ext/standard/var_unserializer.c:1.88 php-src/ext/standard/var_unserializer.c:1.89 --- php-src/ext/standard/var_unserializer.c:1.88 Mon Jul 9 14:33:37 2007 +++ php-src/ext/standard/var_unserializer.c Mon Jul 9 15:58:52 2007 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: var_unserializer.c,v 1.88 2007/07/09 14:33:37 dmitry Exp $ */ +/* $Id: var_unserializer.c,v 1.89 2007/07/09 15:58:52 dmitry Exp $ */ #include "php.h" #include "ext/standard/php_var.h" @@ -359,6 +359,8 @@ { long datalen; int type; + zstr buf; + size_t buf_len; if(ce->unserialize == NULL) { zend_error(E_WARNING, "Class %v has no unserializer", ce->name); @@ -389,11 +391,23 @@ return 0; } - if(ce->unserialize(rval, ce, type, ZSTR((char*)*p), datalen, (zend_unserialize_data *)var_hash TSRMLS_CC) != SUCCESS) { + if (type == IS_UNICODE) { + buf.u = unserialize_ustr(p, datalen); + buf_len = u_strlen(buf.u); + } else { + buf.s = (char*)*p; + buf_len = datalen; + (*p) += datalen; + } + if(ce->unserialize(rval, ce, type, buf, buf_len, (zend_unserialize_data *)var_hash TSRMLS_CC) != SUCCESS) { + if (type == IS_UNICODE) { + efree(buf.v); + } return 0; } - - (*p) += datalen; + if (type == IS_UNICODE) { + efree(buf.v); + } return finish_nested_data(UNSERIALIZE_PASSTHRU); } http://cvs.php.net/viewvc.cgi/php-src/ext/standard/var_unserializer.re?r1=1.66&r2=1.67&diff_format=u Index: php-src/ext/standard/var_unserializer.re diff -u php-src/ext/standard/var_unserializer.re:1.66 php-src/ext/standard/var_unserializer.re:1.67 --- php-src/ext/standard/var_unserializer.re:1.66 Mon Jul 9 14:33:37 2007 +++ php-src/ext/standard/var_unserializer.re Mon Jul 9 15:58:52 2007 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: var_unserializer.re,v 1.66 2007/07/09 14:33:37 dmitry Exp $ */ +/* $Id: var_unserializer.re,v 1.67 2007/07/09 15:58:52 dmitry Exp $ */ #include "php.h" #include "ext/standard/php_var.h" @@ -363,6 +363,8 @@ { long datalen; int type; + zstr buf; + size_t buf_len; if(ce->unserialize == NULL) { zend_error(E_WARNING, "Class %v has no unserializer", ce->name); @@ -393,11 +395,23 @@ return 0; } - if(ce->unserialize(rval, ce, type, ZSTR((char*)*p), datalen, (zend_unserialize_data *)var_hash TSRMLS_CC) != SUCCESS) { + if (type == IS_UNICODE) { + buf.u = unserialize_ustr(p, datalen); + buf_len = u_strlen(buf.u); + } else { + buf.s = (char*)*p; + buf_len = datalen; + (*p) += datalen; + } + if(ce->unserialize(rval, ce, type, buf, buf_len, (zend_unserialize_data *)var_hash TSRMLS_CC) != SUCCESS) { + if (type == IS_UNICODE) { + efree(buf.v); + } return 0; } - - (*p) += datalen; + if (type == IS_UNICODE) { + efree(buf.v); + } return finish_nested_data(UNSERIALIZE_PASSTHRU); }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php