From a83c464d9d2368256b425f62562cd979cf2a2e06 Mon Sep 17 00:00:00 2001
From: Corey Farrell <git@cfware.com>
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")) {
-- 
GitLab