1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

st: Add NULL checking

These are found by Coverity.
This commit is contained in:
K.Takata 2019-07-29 21:38:05 +09:00 committed by 卜部昌平
parent 263ee6639d
commit e70e81b54e
Notes: git 2019-10-21 11:15:06 +09:00

28
st.c
View file

@ -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)