diff options
author | qwell <qwell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-08-17 19:13:25 +0000 |
---|---|---|
committer | qwell <qwell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-08-17 19:13:25 +0000 |
commit | 3a9bc6fc81ceca4909888b5f368226f1418dcb6d (patch) | |
tree | 6eb7b155ebd754288bfebad4de7ec9d57bbf8ddc | |
parent | 75e0fdb0108fbaeccf5a41defb574968e00525b3 (diff) |
Merged revisions 79904 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
(closes issue #10430)
........
r79904 | qwell | 2007-08-17 14:12:19 -0500 (Fri, 17 Aug 2007) | 11 lines
Don't send a semicolon over the wire in sip notify messages.
Caused by fix for issue 9938.
I basically took the code that existed before 9938 was fixed, and
copied it into a new function - ast_unescape_semicolon
There should be very few places this will be needed (pbx_config
does NOT need this (see issue 9938 for details))
Issue 10430, patch by me, with help/ideas from murf (thanks murf).
........
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@79905 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | channels/chan_sip.c | 2 | ||||
-rw-r--r-- | include/asterisk/strings.h | 7 | ||||
-rw-r--r-- | main/utils.c | 15 |
3 files changed, 23 insertions, 1 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index f8b047067..7a95c1d76 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -12310,7 +12310,7 @@ static int sip_notify(int fd, int argc, char *argv[]) initreqprep(&req, p, SIP_NOTIFY); for (var = varlist; var; var = var->next) - add_header(&req, var->name, var->value); + add_header(&req, var->name, ast_unescape_semicolon(var->value)); /* Recalculate our side, and recalculate Call ID */ ast_sip_ouraddrfor(&p->sa.sin_addr, &p->ourip); diff --git a/include/asterisk/strings.h b/include/asterisk/strings.h index 8b0daab87..76b58d715 100644 --- a/include/asterisk/strings.h +++ b/include/asterisk/strings.h @@ -147,6 +147,13 @@ char *ast_strip(char *s), char *ast_strip_quoted(char *s, const char *beg_quotes, const char *end_quotes); /*! + \brief Strip backslash for "escaped" semicolons. + \brief s The string to be stripped (will be modified). + \return The stripped string. + */ +char *ast_unescape_semicolon(char *s); + +/*! \brief Size-limited null-terminating string copy. \arg dst The destination buffer. \arg src The source string diff --git a/main/utils.c b/main/utils.c index a73927e5a..2b87e2b4a 100644 --- a/main/utils.c +++ b/main/utils.c @@ -935,6 +935,21 @@ char *ast_strip_quoted(char *s, const char *beg_quotes, const char *end_quotes) return s; } +char *ast_unescape_semicolon(char *s) +{ + char *e; + char *work = s; + + while ((e = strchr(work, ';'))) { + if ((e > work) && (*(e-1) == '\\')) { + memmove(e - 1, e, strlen(e) + 1); + work = e; + } + } + + return s; +} + int ast_build_string_va(char **buffer, size_t *space, const char *fmt, va_list ap) { int result; |