From 992224c9de69a03f8717d5d9b4ee852e6a96071f Mon Sep 17 00:00:00 2001
From: "David M. Lee" <dlee@digium.com>
Date: Mon, 14 Jan 2013 15:27:19 +0000
Subject: [PATCH] Fix XML encoding of 'identity display' in NOTIFY messages,
 continued.

When r378933 was merged into 1.8, it should have also escaped
remote_display, since it will have the same XML encoding problem when
the caller/callee roles are reversed.

(closes issue ABE-2902)
Reported by: Guenther Kelleter
........

Merged revisions 379001 from http://svn.asterisk.org/svn/asterisk/branches/1.8


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@379020 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 channels/chan_sip.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 3d8b0b7250..61480d6dd2 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -14454,8 +14454,8 @@ static void state_notify_build_xml(struct state_notify_data *data, int full, con
 		if (data->state > 0 && (data->state & AST_EXTENSION_RINGING) && sip_cfg.notifyringing) {
 			/* Twice the extension length should be enough for XML encoding */
 			char local_display[AST_MAX_EXTENSION * 2];
+			char remote_display[AST_MAX_EXTENSION * 2];
 			char *local_target = ast_strdupa(mto);
-			const char *remote_display = exten;
 			/* It may seem odd to base the remote_target on the To header here,
 			 * but testing by reporters on issue ASTERISK-16735 found that basing
 			 * on the From header would cause ringing state hints to not work
@@ -14467,6 +14467,7 @@ static void state_notify_build_xml(struct state_notify_data *data, int full, con
 			char *remote_target = ast_strdupa(mto);
 
 			ast_xml_escape(exten, local_display, sizeof(local_display));
+			ast_xml_escape(exten, remote_display, sizeof(remote_display));
 
 			/* There are some limitations to how this works.  The primary one is that the
 			   callee must be dialing the same extension that is being monitored.  Simply dialing
@@ -14497,8 +14498,9 @@ static void state_notify_build_xml(struct state_notify_data *data, int full, con
 					remote_target = ast_alloca(need);
 					snprintf(remote_target, need, "sip:%s@%s", connected_num, p->fromdomain);
 
-					remote_display = ast_strdupa(S_COR(ast_channel_connected(callee)->id.name.valid,
-						ast_channel_connected(callee)->id.name.str, ""));
+					ast_xml_escape(S_COR(ast_channel_connected(callee)->id.name.valid,
+							     ast_channel_connected(callee)->id.name.str, ""),
+						       remote_display, sizeof(remote_display));
 
 					ast_channel_unlock(callee);
 					callee = ast_channel_unref(callee);
-- 
GitLab