mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-01 18:09:41 +00:00
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: https://origsvn.digium.com/svn/asterisk/branches/1.4@79904 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -11120,7 +11120,7 @@ static int sip_notify(int fd, int argc, char *argv[])
|
|||||||
initreqprep(&req, p, SIP_NOTIFY);
|
initreqprep(&req, p, SIP_NOTIFY);
|
||||||
|
|
||||||
for (var = varlist; var; var = var->next)
|
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 */
|
/* Recalculate our side, and recalculate Call ID */
|
||||||
if (ast_sip_ouraddrfor(&p->sa.sin_addr, &p->ourip))
|
if (ast_sip_ouraddrfor(&p->sa.sin_addr, &p->ourip))
|
||||||
|
@@ -141,6 +141,13 @@ char *ast_strip(char *s),
|
|||||||
*/
|
*/
|
||||||
char *ast_strip_quoted(char *s, const char *beg_quotes, const char *end_quotes);
|
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.
|
\brief Size-limited null-terminating string copy.
|
||||||
\param ast_copy_string function being used
|
\param ast_copy_string function being used
|
||||||
|
15
main/utils.c
15
main/utils.c
@@ -880,6 +880,21 @@ char *ast_strip_quoted(char *s, const char *beg_quotes, const char *end_quotes)
|
|||||||
return s;
|
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 ast_build_string_va(char **buffer, size_t *space, const char *fmt, va_list ap)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
|
Reference in New Issue
Block a user