From a83c464d9d2368256b425f62562cd979cf2a2e06 Mon Sep 17 00:00:00 2001 From: Corey Farrell Date: Wed, 15 Aug 2018 15:49:01 -0400 Subject: [PATCH] res_resolver_unbound: Fix leak of config nameserver strings. Change-Id: I3f396316bb40d1ae6e91f5f688042420f1a540ed --- res/res_resolver_unbound.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/res/res_resolver_unbound.c b/res/res_resolver_unbound.c index 25f61509aa..89a934c8f2 100644 --- a/res/res_resolver_unbound.c +++ b/res/res_resolver_unbound.c @@ -432,20 +432,22 @@ static int unbound_config_preapply(struct unbound_config *cfg) if (cfg->global->nameservers) { struct ao2_iterator it_nameservers; - const char *nameserver; + char *nameserver; it_nameservers = ao2_iterator_init(cfg->global->nameservers, 0); - while ((nameserver = ao2_iterator_next(&it_nameservers))) { + while (!res && (nameserver = ao2_iterator_next(&it_nameservers))) { res = ub_ctx_set_fwd(cfg->global->state->resolver->context, (UNBOUND_CHAR *)nameserver); if (res) { ast_log(LOG_ERROR, "Failed to add nameserver '%s' to unbound resolver: %s\n", nameserver, ub_strerror(res)); - ao2_iterator_destroy(&it_nameservers); - return -1; } + ao2_ref(nameserver, -1); } ao2_iterator_destroy(&it_nameservers); + if (res) { + return -1; + } } if (!strcmp(cfg->global->resolv, "system")) {