From 5c07c3eb03541610101acf7c61ffe3f563a8ed9c Mon Sep 17 00:00:00 2001
From: Brian West <brian@freeswitch.org>
Date: Mon, 28 Apr 2014 13:03:09 -0500
Subject: [PATCH] don't use memory after free when using naptr with mod_enum
 with multiple routes

---
 src/mod/applications/mod_enum/mod_enum.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/mod/applications/mod_enum/mod_enum.c b/src/mod/applications/mod_enum/mod_enum.c
index 3e1ae683fc..d7cc9e5156 100644
--- a/src/mod/applications/mod_enum/mod_enum.c
+++ b/src/mod/applications/mod_enum/mod_enum.c
@@ -368,7 +368,7 @@ static void parse_naptr(const ldns_rr *naptr, const char *number, enum_record_t
 		int proceed = 0, ovector[30];
 		char *substituted = NULL;
 		char *substituted_2 = NULL;
-		char *uri;
+		char *orig_uri;
 		char *uri_expanded = NULL;
 		enum_route_t *route;
 		int supported = 0;
@@ -385,13 +385,15 @@ static void parse_naptr(const ldns_rr *naptr, const char *number, enum_record_t
 				memset(substituted, 0, len);
 
 				switch_perform_substitution(re, proceed, replace, number, substituted, len, ovector);
-				uri = substituted;
+				orig_uri = substituted;
 			} else {
-				uri = replace;
+				orig_uri = replace;
 			}
 			
 			switch_mutex_lock(MUTEX);
 			for (route = globals.route_order; route; route = route->next) {
+				char *uri = orig_uri;
+				
 				if (strcasecmp(service, route->service)) {
 					continue;
 				}
@@ -437,7 +439,7 @@ static void parse_naptr(const ldns_rr *naptr, const char *number, enum_record_t
 			switch_mutex_unlock(MUTEX);			
 
 			if (!supported) {
-				add_result(results, order, preference, service, uri, 0);
+				add_result(results, order, preference, service, orig_uri, 0);
 			}
 
 			switch_safe_free(substituted);