@@ -475,17 +475,30 @@ mysqlnd_result_meta_init(unsigned int field_count, zend_bool persistent TSRMLS_D
475
475
MYSQLND_RES_METADATA * ret = mnd_pecalloc (1 , alloc_size , persistent );
476
476
DBG_ENTER ("mysqlnd_result_meta_init" );
477
477
DBG_INF_FMT ("persistent=%d" , persistent );
478
-
479
- ret -> persistent = persistent ;
480
- ret -> field_count = field_count ;
481
- /* +1 is to have empty marker at the end */
482
- ret -> fields = mnd_pecalloc (field_count + 1 , sizeof (MYSQLND_FIELD ), ret -> persistent );
483
- ret -> zend_hash_keys = mnd_pecalloc (field_count , sizeof (struct mysqlnd_field_hash_key ), ret -> persistent );
484
-
485
- ret -> m = & mysqlnd_mysqlnd_res_meta_methods ;
486
- DBG_INF_FMT ("meta=%p" , ret );
487
- DBG_RETURN (ret );
478
+
479
+ do {
480
+ if (!ret ) {
481
+ break ;
482
+ }
483
+ ret -> m = & mysqlnd_mysqlnd_res_meta_methods ;
484
+
485
+ ret -> persistent = persistent ;
486
+ ret -> field_count = field_count ;
487
+ /* +1 is to have empty marker at the end */
488
+ ret -> fields = mnd_pecalloc (field_count + 1 , sizeof (MYSQLND_FIELD ), ret -> persistent );
489
+ ret -> zend_hash_keys = mnd_pecalloc (field_count , sizeof (struct mysqlnd_field_hash_key ), ret -> persistent );
490
+ if (!ret -> fields || !ret -> zend_hash_keys ) {
491
+ break ;
492
+ }
493
+ DBG_INF_FMT ("meta=%p" , ret );
494
+ DBG_RETURN (ret );
495
+ } while (0 );
496
+ if (ret ) {
497
+ ret -> m -> free_metadata (ret TSRMLS_CC );
498
+ }
499
+ DBG_RETURN (NULL );
488
500
}
501
+ /* }}} */
489
502
490
503
491
504
/* {{{ mysqlnd_res_meta_get_methods */
0 commit comments