@@ -133,7 +133,7 @@ inline static void msgpack_stack_pop(msgpack_unserialize_data_t *var_hashx, long
133133}
134134
135135inline static zend_class_entry * msgpack_unserialize_class (
136- zval * * container , char * class_name , size_t name_len )
136+ zval * * container , char * class_name , size_t name_len , zend_bool init_class )
137137{
138138 zend_class_entry * ce ;
139139 zend_bool incomplete_class = 0 ;
@@ -199,7 +199,9 @@ inline static zend_class_entry* msgpack_unserialize_class(
199199 return NULL ;
200200 }
201201
202- object_init_ex (container_val , ce );
202+ if (init_class || incomplete_class ) {
203+ object_init_ex (container_val , ce );
204+ }
203205
204206 /* store incomplete class name */
205207 if (incomplete_class )
@@ -481,8 +483,7 @@ int msgpack_unserialize_map_item(
481483 break ;
482484 }
483485 } else if (Z_TYPE_P (val ) == IS_STRING ) {
484- ce = msgpack_unserialize_class (
485- container , Z_STRVAL_P (val ), Z_STRLEN_P (val ));
486+ ce = msgpack_unserialize_class (container , Z_STRVAL_P (val ), Z_STRLEN_P (val ), 1 );
486487
487488 if (ce == NULL ) {
488489 MSGPACK_UNSERIALIZE_FINISH_MAP_ITEM (unpack , key , val );
@@ -499,7 +500,7 @@ int msgpack_unserialize_map_item(
499500 case MSGPACK_SERIALIZE_TYPE_CUSTOM_OBJECT :
500501 unpack -> type = MSGPACK_SERIALIZE_TYPE_NONE ;
501502
502- ce = msgpack_unserialize_class (container , Z_STRVAL_P (key ), Z_STRLEN_P (key ));
503+ ce = msgpack_unserialize_class (container , Z_STRVAL_P (key ), Z_STRLEN_P (key ), 0 );
503504 if (ce == NULL ) {
504505 MSGPACK_UNSERIALIZE_FINISH_MAP_ITEM (unpack , key , val );
505506
0 commit comments