@@ -311,6 +311,7 @@ static ZEND_METHOD(msgpack_unpacker, __destruct) /* {{{ */ {
311311 php_msgpack_unpacker_t * unpacker = Z_MSGPACK_UNPACKER_P (getThis ());
312312 smart_str_free (& unpacker -> buffer );
313313 msgpack_unserialize_var_destroy (& unpacker -> var_hash , unpacker -> error );
314+ zval_ptr_dtor (& unpacker -> retval );
314315}
315316/* }}} */
316317
@@ -388,7 +389,6 @@ static ZEND_METHOD(msgpack_unpacker, execute) /* {{{ */ {
388389 }
389390
390391 if (unpacker -> finished ) {
391- msgpack_unserialize_set_return_value (& unpacker -> var_hash , & unpacker -> retval );
392392 msgpack_unserialize_var_destroy (& unpacker -> var_hash , unpacker -> error );
393393 unpacker -> error = 0 ;
394394
@@ -438,20 +438,21 @@ static ZEND_METHOD(msgpack_unpacker, data) /* {{{ */ {
438438 }
439439
440440 if (unpacker -> finished ) {
441- msgpack_unserialize_set_return_value ( & unpacker -> var_hash , & unpacker -> retval );
442- }
443-
444- if ( object == NULL ) {
445- ZVAL_COPY_VALUE (return_value , & unpacker -> retval );
446- } else {
447- zval zv ;
448- ZVAL_COPY_VALUE (& zv , & unpacker -> retval );
449-
450- if ( msgpack_convert_object ( return_value , object , & zv ) != SUCCESS ) {
441+ if ( object == NULL ) {
442+ ZVAL_COPY_VALUE ( return_value , & unpacker -> retval );
443+ } else {
444+ zval zv ;
445+ ZVAL_COPY_VALUE (& zv , & unpacker -> retval );
446+
447+ if ( msgpack_convert_object ( return_value , object , & zv ) != SUCCESS ) {
448+ zval_ptr_dtor (& zv );
449+ RETURN_NULL ();
450+ }
451451 zval_ptr_dtor (& zv );
452- RETURN_NULL ();
453452 }
454- zval_ptr_dtor (& zv );
453+ ZVAL_UNDEF (& unpacker -> retval );
454+ } else {
455+ RETURN_FALSE ;
455456 }
456457
457458 ZEND_MN (msgpack_unpacker_reset )(INTERNAL_FUNCTION_PARAM_PASSTHRU );
@@ -483,7 +484,6 @@ static ZEND_METHOD(msgpack_unpacker, reset) /* {{{ */ {
483484 msgpack_unserialize_var_destroy (& unpacker -> var_hash , unpacker -> error );
484485 unpacker -> error = 0 ;
485486
486-
487487 template_init (& unpacker -> mp );
488488
489489 msgpack_unserialize_var_init (& unpacker -> var_hash );
0 commit comments