diff options
author | Kinsey Moore <kmoore@digium.com> | 2012-07-12 19:05:11 +0000 |
---|---|---|
committer | Kinsey Moore <kmoore@digium.com> | 2012-07-12 19:05:11 +0000 |
commit | 65fe6976ae14b0ddb944197956be73787020b20d (patch) | |
tree | 3d240763d93df1f64fb58925ccb11865c6e1d083 /channels | |
parent | 67618125666b538ba0dd05749db3cb1013cc7ef7 (diff) |
Prevent double uri_escaping in chan_sip when pedantic is enabled
If pedantic mode is enabled, outbound invites will have double-escaped
contacts. This avoids setting an already-escaped string into a field
where it is expected to be unescaped.
(closes issue ASTERISK-20023)
Reported by: Walter Doekes
........
Merged revisions 369993 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 369994 from http://svn.asterisk.org/svn/asterisk/branches/10
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@369995 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_sip.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 0fee3a56b..310cd2938 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -12855,11 +12855,11 @@ static void initreqprep(struct sip_request *req, struct sip_pvt *p, int sipmetho else /* Save for any further attempts */ ast_string_field_set(p, fromname, n); + ast_copy_string(tmp_l, l, sizeof(tmp_l)); if (sip_cfg.pedanticsipchecking) { ast_escape_quoted(n, tmp_n, sizeof(tmp_n)); n = tmp_n; ast_uri_encode(l, tmp_l, sizeof(tmp_l), ast_uri_sip_user); - l = tmp_l; } ourport = (p->fromdomainport) ? p->fromdomainport : ast_sockaddr_port(&p->ourip); @@ -12873,10 +12873,10 @@ static void initreqprep(struct sip_request *req, struct sip_pvt *p, int sipmetho if (!sip_standard_port(p->socket.type, ourport)) { size_t offset = strlen(from); - snprintf(&from[offset], sizeof(from) - offset, "<sip:%s@%s:%d>;tag=%s", l, d, ourport, p->tag); + snprintf(&from[offset], sizeof(from) - offset, "<sip:%s@%s:%d>;tag=%s", tmp_l, d, ourport, p->tag); } else { size_t offset = strlen(from); - snprintf(&from[offset], sizeof(from) - offset, "<sip:%s@%s>;tag=%s", l, d, p->tag); + snprintf(&from[offset], sizeof(from) - offset, "<sip:%s@%s>;tag=%s", tmp_l, d, p->tag); } if (!ast_strlen_zero(explicit_uri)) { |