@@ -474,13 +474,10 @@ mi_decl_export void mi_process_info(size_t* elapsed_msecs, size_t* user_msecs, s
474474// Return statistics
475475// --------------------------------------------------------
476476
477- bool mi_stats_get (size_t stats_size , mi_stats_t * stats ) mi_attr_noexcept {
478- if (stats == NULL || stats_size == 0 ) return false;
479- _mi_memzero (stats , stats_size );
480- if (stats_size < sizeof (mi_stats_t )) return false;
481- const size_t size = (stats_size > sizeof (mi_stats_t ) ? sizeof (mi_stats_t ) : stats_size );
482- _mi_memcpy (stats , & _mi_stats_main , size );
483- stats -> version = MI_STAT_VERSION ;
477+ bool mi_stats_get (mi_stats_t * stats ) mi_attr_noexcept {
478+ if (stats == NULL || stats -> size != sizeof (mi_stats_t ) || stats -> version != MI_STAT_VERSION ) return false;
479+ _mi_memzero (stats ,stats -> size );
480+ _mi_memcpy (stats , & _mi_stats_main , sizeof (mi_stats_t ));
484481 return true;
485482}
486483
@@ -584,7 +581,7 @@ char* mi_stats_get_json(size_t output_size, char* output_buf) mi_attr_noexcept {
584581 if (!mi_heap_buf_expand (& hbuf )) return NULL ;
585582 }
586583 mi_heap_buf_print (& hbuf , "{\n" );
587- mi_heap_buf_print_value (& hbuf , "version " , MI_STAT_VERSION );
584+ mi_heap_buf_print_value (& hbuf , "stat_version " , MI_STAT_VERSION );
588585 mi_heap_buf_print_value (& hbuf , "mimalloc_version" , MI_MALLOC_VERSION );
589586
590587 // process info
@@ -624,5 +621,12 @@ char* mi_stats_get_json(size_t output_size, char* output_buf) mi_attr_noexcept {
624621 }
625622 mi_heap_buf_print (& hbuf , " ]\n" );
626623 mi_heap_buf_print (& hbuf , "}\n" );
627- return hbuf .buf ;
624+ if (hbuf .used >= hbuf .size ) {
625+ // failed
626+ if (hbuf .can_realloc ) { mi_free (hbuf .buf ); }
627+ return NULL ;
628+ }
629+ else {
630+ return hbuf .buf ;
631+ }
628632}
0 commit comments