From: Brian West Date: Mon, 8 Sep 2014 16:25:48 +0000 (-0500) Subject: FS-6803 #resolve X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=51f47420879c296ad3049053d9b5e12f3829a2bc;p=thirdparty%2Ffreeswitch.git FS-6803 #resolve --- diff --git a/src/mod/applications/mod_translate/mod_translate.c b/src/mod/applications/mod_translate/mod_translate.c index 6b8b225d34..5ebcdaec23 100644 --- a/src/mod/applications/mod_translate/mod_translate.c +++ b/src/mod/applications/mod_translate/mod_translate.c @@ -118,9 +118,9 @@ static void translate_number(char *number, char *profile, char **translated, swi translate_rule_t *hi = NULL; translate_rule_t *rule = NULL; switch_regex_t *re = NULL; - int proceed = 0, ovector[30]; - char *substituted = NULL; - uint32_t len = 0; + int proceed = 0, ovector[30], subbedlen = 0; + char *substituted = NULL, *subbed = NULL, *session_malloc = NULL; + uint32_t len = 1024; if (!profile) { profile = "US"; @@ -138,7 +138,7 @@ static void translate_number(char *number, char *profile, char **translated, swi switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s =~ /%s/\n", number, rule->regex); if ((proceed = switch_regex_perform(number, rule->regex, &re, ovector, sizeof(ovector) / sizeof(ovector[0])))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s matched %s, replacing with %s\n", number, rule->regex, rule->replace); - if (!(substituted = malloc(len))) { + if (!(substituted = switch_core_session_alloc(session, len))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n"); switch_regex_safe_free(re); goto end; @@ -154,6 +154,17 @@ static void translate_number(char *number, char *profile, char **translated, swi } else if (event) { substituted = switch_event_expand_headers(event, substituted); } + + subbedlen = strlen(subbed) + 1; + session_malloc = (char *)switch_core_session_alloc(session, subbedlen); + memset(session_malloc, 0, subbedlen); + strncpy(session_malloc, subbed, subbedlen); + if (subbed != substituted) + { + switch_safe_free(subbed); + } + + substituted = session_malloc; } break;