{
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);
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);
}
{
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);
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);
}