From 1e8c66e749a20c2c0202f0da58918e9313f0512c Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Wed, 14 Jul 2010 22:32:29 +0000 Subject: Fix errors where incorrect address information was printed. ast_sockaddr_stringiy_fmt (which is call by all ast_sockaddr_stringify* functions) uses thread-local storage for storing the string that it creates. In cases where ast_sockaddr_stringify_fmt was being called twice within the same statement, the result of one call would be overwritten by the result of the other call. This usually was happening in printf-like statements and was resulting in the same stringified addressed being printed twice instead of two separate addresses. I have fixed this by using ast_strdupa on the result of stringify functions if they are used twice within the same statement. As far as I could tell, there were no instances where a pointer to the result of such a call were saved anywhere, so this is the only situation I could see where this error could occur. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@276570 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/dnsmgr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'main/dnsmgr.c') diff --git a/main/dnsmgr.c b/main/dnsmgr.c index 29ac4e30f..5818c0478 100644 --- a/main/dnsmgr.c +++ b/main/dnsmgr.c @@ -161,8 +161,8 @@ static int dnsmgr_refresh(struct ast_dnsmgr_entry *entry, int verbose) ast_sockaddr_set_port(&tmp, ast_sockaddr_port(entry->result)); if (ast_sockaddr_cmp(&tmp, entry->result)) { ast_log(LOG_NOTICE, "dnssrv: host '%s' changed from %s to %s\n", - entry->name, ast_sockaddr_stringify(entry->result), - ast_sockaddr_stringify(&tmp)); + entry->name, ast_strdupa(ast_sockaddr_stringify(entry->result)), + ast_strdupa(ast_sockaddr_stringify(&tmp))); ast_sockaddr_copy(entry->result, &tmp); changed = entry->changed = 1; -- cgit v1.2.3