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