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
This commit is contained in:
Mark Michelson
2010-07-14 22:32:29 +00:00
parent 5d9aa45721
commit 1e8c66e749
4 changed files with 15 additions and 15 deletions

View File

@@ -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;