From e70e81b54e10f1882874884564454f566c41b0dd Mon Sep 17 00:00:00 2001 From: "K.Takata" Date: Mon, 29 Jul 2019 21:38:05 +0900 Subject: st: Add NULL checking These are found by Coverity. --- st.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'st.c') diff --git a/st.c b/st.c index 924a15d02f..5d3588ff14 100644 --- a/st.c +++ b/st.c @@ -561,6 +561,8 @@ stat_col(void) FILE *f; if (!collision.total) return; f = fopen((snprintf(fname, sizeof(fname), "/tmp/col%ld", (long)getpid()), fname), "w"); + if (f == NULL) + return; fprintf(f, "collision: %d / %d (%6.2f)\n", collision.all, collision.total, ((double)collision.all / (collision.total)) * 100); fprintf(f, "num: %d, str: %d, strcase: %d\n", collision.num, collision.str, collision.strcase); @@ -592,16 +594,27 @@ st_init_table_with_size(const struct st_hash_type *type, st_index_t size) n = get_power2(size); tab = (st_table *) malloc(sizeof (st_table)); + if (tab == NULL) + return NULL; tab->type = type; tab->entry_power = n; tab->bin_power = features[n].bin_power; tab->size_ind = features[n].size_ind; if (n <= MAX_POWER2_FOR_TABLES_WITHOUT_BINS) tab->bins = NULL; - else + else { tab->bins = (st_index_t *) malloc(bins_size(tab)); + if (tab->bins == NULL) { + free(tab); + return NULL; + } + } tab->entries = (st_table_entry *) malloc(get_allocated_entries(tab) * sizeof(st_table_entry)); + if (tab->entries == NULL) { + st_free_table(tab); + return NULL; + } #ifdef ST_DEBUG memset(tab->entries, ST_INIT_VAL_BYTE, get_allocated_entries(tab) * sizeof(st_table_entry)); @@ -1299,13 +1312,24 @@ st_copy(st_table *old_tab) st_table *new_tab; new_tab = (st_table *) malloc(sizeof(st_table)); + if (new_tab == NULL) + return NULL; *new_tab = *old_tab; if (old_tab->bins == NULL) new_tab->bins = NULL; - else + else { new_tab->bins = (st_index_t *) malloc(bins_size(old_tab)); + if (new_tab->bins == NULL) { + free(new_tab); + return NULL; + } + } new_tab->entries = (st_table_entry *) malloc(get_allocated_entries(old_tab) * sizeof(st_table_entry)); + if (new_tab->entries == NULL) { + st_free_table(new_tab); + return NULL; + } MEMCPY(new_tab->entries, old_tab->entries, st_table_entry, get_allocated_entries(old_tab)); if (old_tab->bins != NULL) -- cgit v1.2.1