@@ -405,7 +405,7 @@ static int zend_implement_arrayaccess(zend_class_entry *interface, zend_class_en
405
405
/* }}}*/
406
406
407
407
/* {{{ zend_user_serialize */
408
- int zend_user_serialize (zval * object , unsigned char * * buffer , zend_uint * buf_len , zend_serialize_data * data TSRMLS_DC )
408
+ ZEND_API int zend_user_serialize (zval * object , unsigned char * * buffer , zend_uint * buf_len , zend_serialize_data * data TSRMLS_DC )
409
409
{
410
410
zend_class_entry * ce = Z_OBJCE_P (object );
411
411
zval * retval ;
@@ -442,7 +442,7 @@ int zend_user_serialize(zval *object, unsigned char **buffer, zend_uint *buf_len
442
442
/* }}} */
443
443
444
444
/* {{{ zend_user_unserialize */
445
- int zend_user_unserialize (zval * * object , zend_class_entry * ce , const unsigned char * buf , zend_uint buf_len , zend_unserialize_data * data TSRMLS_DC )
445
+ ZEND_API int zend_user_unserialize (zval * * object , zend_class_entry * ce , const unsigned char * buf , zend_uint buf_len , zend_unserialize_data * data TSRMLS_DC )
446
446
{
447
447
zval * zdata ;
448
448
@@ -466,13 +466,17 @@ int zend_user_unserialize(zval **object, zend_class_entry *ce, const unsigned ch
466
466
/* {{{ zend_implement_serializable */
467
467
static int zend_implement_serializable (zend_class_entry * interface , zend_class_entry * class_type TSRMLS_DC )
468
468
{
469
- if (( class_type -> serialize && class_type -> serialize != zend_user_serialize )
470
- || (class_type -> unserialize && class_type -> unserialize != zend_user_unserialize )
471
- ) {
469
+ if (class_type -> parent
470
+ && (class_type -> parent -> serialize || class_type -> parent -> unserialize )
471
+ && ! instanceof_function_ex ( class_type -> parent , zend_ce_serializable , 1 TSRMLS_CC ) ) {
472
472
return FAILURE ;
473
473
}
474
- class_type -> serialize = zend_user_serialize ;
475
- class_type -> unserialize = zend_user_unserialize ;
474
+ if (!class_type -> serialize ) {
475
+ class_type -> serialize = zend_user_serialize ;
476
+ }
477
+ if (!class_type -> unserialize ) {
478
+ class_type -> unserialize = zend_user_unserialize ;
479
+ }
476
480
return SUCCESS ;
477
481
}
478
482
/* }}}*/
0 commit comments