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

Reply via email to