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
This commit is contained in:
David M. Lee
2013-01-14 15:27:19 +00:00
parent af1666f1cf
commit 992224c9de

View File

@@ -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) { if (data->state > 0 && (data->state & AST_EXTENSION_RINGING) && sip_cfg.notifyringing) {
/* Twice the extension length should be enough for XML encoding */ /* Twice the extension length should be enough for XML encoding */
char local_display[AST_MAX_EXTENSION * 2]; char local_display[AST_MAX_EXTENSION * 2];
char remote_display[AST_MAX_EXTENSION * 2];
char *local_target = ast_strdupa(mto); 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, /* 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 * but testing by reporters on issue ASTERISK-16735 found that basing
* on the From header would cause ringing state hints to not work * 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); char *remote_target = ast_strdupa(mto);
ast_xml_escape(exten, local_display, sizeof(local_display)); 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 /* 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 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); remote_target = ast_alloca(need);
snprintf(remote_target, need, "sip:%s@%s", connected_num, p->fromdomain); 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_xml_escape(S_COR(ast_channel_connected(callee)->id.name.valid,
ast_channel_connected(callee)->id.name.str, "")); ast_channel_connected(callee)->id.name.str, ""),
remote_display, sizeof(remote_display));
ast_channel_unlock(callee); ast_channel_unlock(callee);
callee = ast_channel_unref(callee); callee = ast_channel_unref(callee);