mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-25 07:01:09 +00:00
Handle URL encoded stuff in pedantic checking
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3303 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -866,6 +866,30 @@ static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void url_decode(char *s)
|
||||||
|
{
|
||||||
|
char *o = s;
|
||||||
|
unsigned int tmp;
|
||||||
|
while(*s) {
|
||||||
|
switch(*s) {
|
||||||
|
case '%':
|
||||||
|
if (strlen(s) > 2) {
|
||||||
|
if (sscanf(s + 1, "%2x", &tmp) == 1) {
|
||||||
|
*o = tmp;
|
||||||
|
s += 2; /* Will be incremented once more when we break out */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Fall through if something wasn't right with the formatting */
|
||||||
|
default:
|
||||||
|
*o = *s;
|
||||||
|
}
|
||||||
|
s++;
|
||||||
|
o++;
|
||||||
|
}
|
||||||
|
*o = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
/*--- ditch_braces: Pick out text in braces from character string ---*/
|
/*--- ditch_braces: Pick out text in braces from character string ---*/
|
||||||
static char *ditch_braces(char *tmp)
|
static char *ditch_braces(char *tmp)
|
||||||
{
|
{
|
||||||
@@ -1600,8 +1624,8 @@ static int hangup_sip2cause(int cause)
|
|||||||
switch(cause) {
|
switch(cause) {
|
||||||
case 404: /* Not found */
|
case 404: /* Not found */
|
||||||
return AST_CAUSE_UNALLOCATED;
|
return AST_CAUSE_UNALLOCATED;
|
||||||
case 483: /* Too many hops */
|
case 483: /* Too many hops */
|
||||||
return AST_CAUSE_FAILURE;
|
return AST_CAUSE_FAILURE;
|
||||||
case 486:
|
case 486:
|
||||||
return AST_CAUSE_BUSY;
|
return AST_CAUSE_BUSY;
|
||||||
default:
|
default:
|
||||||
@@ -4656,6 +4680,8 @@ static int get_destination(struct sip_pvt *p, struct sip_request *oreq)
|
|||||||
} else
|
} else
|
||||||
strncpy(p->fromdomain, fr, sizeof(p->fromdomain) - 1);
|
strncpy(p->fromdomain, fr, sizeof(p->fromdomain) - 1);
|
||||||
}
|
}
|
||||||
|
if (pedanticsipchecking)
|
||||||
|
url_decode(c);
|
||||||
if (sip_debug_test_pvt(p))
|
if (sip_debug_test_pvt(p))
|
||||||
ast_verbose("Looking for %s in %s\n", c, p->context);
|
ast_verbose("Looking for %s in %s\n", c, p->context);
|
||||||
if (ast_exists_extension(NULL, p->context, c, 1, fr) ||
|
if (ast_exists_extension(NULL, p->context, c, 1, fr) ||
|
||||||
|
Reference in New Issue
Block a user