diff options
-rw-r--r-- | channels/chan_sip.c | 4 | ||||
-rw-r--r-- | include/asterisk/netsock2.h | 8 |
2 files changed, 11 insertions, 1 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index abf535782..43a9d8bfe 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -12994,7 +12994,7 @@ static int transmit_notify_with_mwi(struct sip_pvt *p, int newmsgs, int oldmsgs, struct sip_request req; struct ast_str *out = ast_str_alloca(500); int ourport = (p->fromdomainport) ? p->fromdomainport : ast_sockaddr_port(&p->ourip); - const char *domain = S_OR(p->fromdomain, ast_sockaddr_stringify_host_remote(&p->ourip)); + const char *domain; const char *exten = S_OR(vmexten, default_vmexten); initreqprep(&req, p, SIP_NOTIFY, NULL); @@ -13002,6 +13002,8 @@ static int transmit_notify_with_mwi(struct sip_pvt *p, int newmsgs, int oldmsgs, add_header(&req, "Content-Type", default_notifymime); ast_str_append(&out, 0, "Messages-Waiting: %s\r\n", newmsgs ? "yes" : "no"); + /* domain initialization occurs here because initreqprep changes ast_sockaddr_stringify string. */ + domain = S_OR(p->fromdomain, ast_sockaddr_stringify_host_remote(&p->ourip)); if (!sip_standard_port(p->socket.type, ourport)) { if (p->socket.type == SIP_TRANSPORT_UDP) { diff --git a/include/asterisk/netsock2.h b/include/asterisk/netsock2.h index 83af23a97..b541b50eb 100644 --- a/include/asterisk/netsock2.h +++ b/include/asterisk/netsock2.h @@ -185,6 +185,14 @@ int ast_sockaddr_cmp_addr(const struct ast_sockaddr *a, const struct ast_sockadd * a.b.c.d for IPv4 * [a:b:c:...:d] for IPv6. * AST_SOCKADDR_STR_PORT: port only + * + * \note The string pointer returned by this function will point to a string that + * will be changed whenever any form of ast_sockaddr_stringify_fmt is called on that + * thread. Because of this, it is important that if you use this function, you use the + * string before another use of this function is made elsewhere in the same thread. + * The easiest way to accomplish this is by immediately copying the string to a buffer + * with something like ast_strdupa. + * * \retval "(null)" \a addr is null * \retval "" An error occurred during processing * \retval string The stringified form of the address |