@@ -744,19 +744,22 @@ static int populate_languages_metadata(MMDB_s *mmdb,
744
744
mmdb -> metadata .languages .count = 0 ;
745
745
mmdb -> metadata .languages .names = calloc (array_size , sizeof (char * ));
746
746
if (NULL == mmdb -> metadata .languages .names ) {
747
+ MMDB_free_entry_data_list (first_member );
747
748
return MMDB_OUT_OF_MEMORY_ERROR ;
748
749
}
749
750
750
751
for (uint32_t i = 0 ; i < array_size ; i ++ ) {
751
752
member = member -> next ;
752
753
if (MMDB_DATA_TYPE_UTF8_STRING != member -> entry_data .type ) {
754
+ MMDB_free_entry_data_list (first_member );
753
755
return MMDB_INVALID_METADATA_ERROR ;
754
756
}
755
757
756
758
mmdb -> metadata .languages .names [i ] = mmdb_strndup (
757
759
member -> entry_data .utf8_string , member -> entry_data .data_size );
758
760
759
761
if (NULL == mmdb -> metadata .languages .names [i ]) {
762
+ MMDB_free_entry_data_list (first_member );
760
763
return MMDB_OUT_OF_MEMORY_ERROR ;
761
764
}
762
765
// We assign this as we go so that if we fail a calloc and need to
@@ -1646,6 +1649,10 @@ int MMDB_get_entry_data_list(MMDB_entry_s *start,
1646
1649
1647
1650
int const status =
1648
1651
get_entry_data_list (start -> mmdb , start -> offset , list , pool , 0 );
1652
+ if (MMDB_SUCCESS != status ) {
1653
+ data_pool_destroy (pool );
1654
+ return status ;
1655
+ }
1649
1656
1650
1657
* entry_data_list = data_pool_to_list (pool );
1651
1658
if (!* entry_data_list ) {
0 commit comments