From 911f373ea9c745894c79fa7892db855a0f64a766 Mon Sep 17 00:00:00 2001 From: Nalin Dahyabhai Date: Mon, 17 Mar 2014 18:32:39 -0400 Subject: Better handle out-of-memory reading configuration Avoid calling strdup() in a situation where we don't need to, so that we can better handle cases where it fails (static analysis). --- src/back-sch.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/back-sch.c b/src/back-sch.c index 113c350..78f2627 100644 --- a/src/back-sch.c +++ b/src/back-sch.c @@ -109,8 +109,8 @@ backend_copy_set_config(const struct backend_set_data *data) } ret->common.self = ret; ret->common.state = data->common.state; - ret->common.group = strdup(data->common.group); - ret->common.set = strdup(data->common.set); + ret->common.group = data->common.group ? strdup(data->common.group) : NULL; + ret->common.set = data->common.set ? strdup(data->common.set) : NULL; ret->common.bases = backend_shr_dup_strlist(data->common.bases); ret->common.restrict_subtrees = backend_shr_dup_sdnlist(data->common.restrict_subtrees); ret->common.ignore_subtrees = backend_shr_dup_sdnlist(data->common.ignore_subtrees); @@ -162,7 +162,7 @@ backend_set_config_read_config(struct plugin_state *state, Slapi_Entry *e, const char *group, const char *container, bool_t *flag, struct backend_shr_set_data **pret) { - char **bases, *entry_filter, **attributes, *rdn_format, *dn; + char **bases, *entry_filter, **attributes, *rdn_format, *tmp_dn; char *nsswitch_min_id, *check_nsswitch, *strp; bool_t check_access; struct backend_set_data ret; @@ -196,7 +196,6 @@ backend_set_config_read_config(struct plugin_state *state, Slapi_Entry *e, ret.common.state = state; tmp_sdn = slapi_sdn_new_dn_byval(group); ret.common.group = strdup(slapi_sdn_get_ndn(tmp_sdn)); - slapi_sdn_free(&tmp_sdn); ret.common.set = strdup(container); ret.common.bases = bases; ret.common.restrict_subtrees = restrict_subtrees; @@ -216,11 +215,10 @@ backend_set_config_read_config(struct plugin_state *state, Slapi_Entry *e, ret.common.skip_uninteresting_updates = 0; } if ((ret.common.set != NULL) && (strlen(ret.common.set) > 0)) { - dn = slapi_dn_plus_rdn(ret.common.group, ret.common.set); - } else { - dn = strdup(ret.common.group); + tmp_dn = slapi_dn_plus_rdn(ret.common.group, ret.common.set); + slapi_sdn_free(&tmp_sdn); + tmp_sdn = slapi_sdn_new_dn_passin(tmp_dn); } - tmp_sdn = slapi_sdn_new_dn_passin(dn); ret.container_sdn = slapi_sdn_new_dn_byval(slapi_sdn_get_ndn(tmp_sdn)); slapi_sdn_free(&tmp_sdn); ret.rdn_format = rdn_format; -- cgit