@@ -354,35 +354,35 @@ void phongo_writeconcern_init(zval *return_value, const mongoc_write_concern_t *
354354zend_bool phongo_writeconcernerror_init (zval * return_value , bson_t * bson TSRMLS_DC ) /* {{{ */
355355{
356356 bson_iter_t iter ;
357- php_phongo_writeconcernerror_t * writeconcernerror ;
357+ php_phongo_writeconcernerror_t * intern ;
358358
359- writeconcernerror = Z_WRITECONCERNERROR_OBJ_P (return_value );
359+ object_init_ex (return_value , php_phongo_writeconcernerror_ce );
360+
361+ intern = Z_WRITECONCERNERROR_OBJ_P (return_value );
360362
361363 if (bson_iter_init_find (& iter , bson , "code" ) && BSON_ITER_HOLDS_INT32 (& iter )) {
362- writeconcernerror -> code = bson_iter_int32 (& iter );
364+ intern -> code = bson_iter_int32 (& iter );
363365 }
366+
364367 if (bson_iter_init_find (& iter , bson , "errmsg" ) && BSON_ITER_HOLDS_UTF8 (& iter )) {
365368 uint32_t errmsg_len ;
366369 const char * err_msg = bson_iter_utf8 (& iter , & errmsg_len );
367370
368- writeconcernerror -> message = estrndup (err_msg , errmsg_len );
371+ intern -> message = estrndup (err_msg , errmsg_len );
369372 }
373+
370374 if (bson_iter_init_find (& iter , bson , "errInfo" ) && BSON_ITER_HOLDS_DOCUMENT (& iter )) {
371- uint32_t len ;
372- const uint8_t * data ;
375+ uint32_t len ;
376+ const uint8_t * data = NULL ;
373377
374378 bson_iter_document (& iter , & len , & data );
375379
376- if (!data ) {
377- return false;
378- }
379-
380- if (!phongo_bson_to_zval (data , len , & writeconcernerror -> info )) {
381- zval_ptr_dtor (& writeconcernerror -> info );
380+ if (!phongo_bson_to_zval (data , len , & intern -> info )) {
381+ zval_ptr_dtor (& intern -> info );
382382#if PHP_VERSION_ID >= 70000
383- ZVAL_UNDEF (& writeconcernerror -> info );
383+ ZVAL_UNDEF (& intern -> info );
384384#else
385- writeconcernerror -> info = NULL ;
385+ intern -> info = NULL ;
386386#endif
387387
388388 return false;
@@ -395,38 +395,43 @@ zend_bool phongo_writeconcernerror_init(zval *return_value, bson_t *bson TSRMLS_
395395zend_bool phongo_writeerror_init (zval * return_value , bson_t * bson TSRMLS_DC ) /* {{{ */
396396{
397397 bson_iter_t iter ;
398- php_phongo_writeerror_t * writeerror ;
398+ php_phongo_writeerror_t * intern ;
399399
400- writeerror = Z_WRITEERROR_OBJ_P (return_value );
400+ object_init_ex (return_value , php_phongo_writeerror_ce );
401+
402+ intern = Z_WRITEERROR_OBJ_P (return_value );
401403
402404 if (bson_iter_init_find (& iter , bson , "code" ) && BSON_ITER_HOLDS_INT32 (& iter )) {
403- writeerror -> code = bson_iter_int32 (& iter );
405+ intern -> code = bson_iter_int32 (& iter );
404406 }
407+
405408 if (bson_iter_init_find (& iter , bson , "errmsg" ) && BSON_ITER_HOLDS_UTF8 (& iter )) {
406409 uint32_t errmsg_len ;
407410 const char * err_msg = bson_iter_utf8 (& iter , & errmsg_len );
408411
409- writeerror -> message = estrndup (err_msg , errmsg_len );
412+ intern -> message = estrndup (err_msg , errmsg_len );
410413 }
411- if (bson_iter_init_find (& iter , bson , "errInfo" )) {
412- bson_t info ;
413414
414- bson_init (& info );
415- bson_append_iter (& info , NULL , 0 , & iter );
415+ if (bson_iter_init_find (& iter , bson , "errInfo" ) && BSON_ITER_HOLDS_DOCUMENT (& iter )) {
416+ uint32_t len ;
417+ const uint8_t * data = NULL ;
418+
419+ bson_iter_document (& iter , & len , & data );
416420
417- if (!phongo_bson_to_zval (bson_get_data ( & info ), info . len , & writeerror -> info )) {
418- zval_ptr_dtor (& writeerror -> info );
421+ if (!phongo_bson_to_zval (data , len , & intern -> info )) {
422+ zval_ptr_dtor (& intern -> info );
419423#if PHP_VERSION_ID >= 70000
420- ZVAL_UNDEF (& writeerror -> info );
424+ ZVAL_UNDEF (& intern -> info );
421425#else
422- writeerror -> info = NULL ;
426+ intern -> info = NULL ;
423427#endif
424428
425429 return false;
426430 }
427431 }
432+
428433 if (bson_iter_init_find (& iter , bson , "index" ) && BSON_ITER_HOLDS_INT32 (& iter )) {
429- writeerror -> index = bson_iter_int32 (& iter );
434+ intern -> index = bson_iter_int32 (& iter );
430435 }
431436
432437 return true;
0 commit comments