@@ -203,14 +203,15 @@ PHP_MSGPACK_API void php_msgpack_serialize(smart_str *buf, zval *val) /* {{{ */
203203}
204204/* }}} */
205205
206- PHP_MSGPACK_API void php_msgpack_unserialize (zval * return_value , char * str , size_t str_len ) /* {{{ */ {
206+ PHP_MSGPACK_API int php_msgpack_unserialize (zval * return_value , char * str , size_t str_len ) /* {{{ */ {
207207 int ret ;
208208 size_t off = 0 ;
209209 msgpack_unpack_t mp ;
210210 msgpack_unserialize_data_t var_hash ;
211211
212212 if (str_len <= 0 ) {
213- RETURN_NULL ();
213+ RETVAL_NULL ();
214+ return FAILURE ;
214215 }
215216
216217 template_init (& mp );
@@ -224,28 +225,25 @@ PHP_MSGPACK_API void php_msgpack_unserialize(zval *return_value, char *str, size
224225
225226 switch (ret ) {
226227 case MSGPACK_UNPACK_PARSE_ERROR :
227- zval_dtor (return_value );
228- msgpack_unserialize_var_destroy (& var_hash , 1 );
229228 MSGPACK_WARNING ("[msgpack] (%s) Parse error" , __FUNCTION__ );
230- RETURN_FALSE ;
229+ break ;
231230 case MSGPACK_UNPACK_CONTINUE :
232- zval_dtor (return_value );
233- msgpack_unserialize_var_destroy (& var_hash , 1 );
234231 MSGPACK_WARNING ("[msgpack] (%s) Insufficient data for unserializing" , __FUNCTION__ );
235- RETURN_FALSE ;
232+ break ;
236233 case MSGPACK_UNPACK_EXTRA_BYTES :
237234 case MSGPACK_UNPACK_SUCCESS :
238235 msgpack_unserialize_var_destroy (& var_hash , 0 );
239236 if (off < str_len ) {
240237 MSGPACK_WARNING ("[msgpack] (%s) Extra bytes" , __FUNCTION__ );
241238 }
242- break ;
239+ return SUCCESS ;
243240 default :
244- zval_dtor (return_value );
245- msgpack_unserialize_var_destroy (& var_hash , 1 );
246241 MSGPACK_WARNING ("[msgpack] (%s) Unknown result" , __FUNCTION__ );
247- RETURN_FALSE ;
248242 }
243+ zval_dtor (return_value );
244+ msgpack_unserialize_var_destroy (& var_hash , 1 );
245+ RETVAL_FALSE ;
246+ return FAILURE ;
249247}
250248/* }}} */
251249
0 commit comments