Skip to content
Snippets Groups Projects
Commit 0024ad62 authored by Dwayne M. Hubbard's avatar Dwayne M. Hubbard
Browse files

Merged revisions 174082 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r174082 | dhubbard | 2009-02-06 17:36:03 -0600 (Fri, 06 Feb 2009) | 5 lines

check ast_strlen_zero() before calling ast_strdupa() in sip_uri_headers_cmp()
and sip_uri_params_cmp()

The reporter didn't actually upload a properly-formed patch, instead a 
modified chan_sip.c file was uploaded.  I created a patch to determine the
changes, then modified the suggested changes to create a proper fix.  The
summary above is a complete description of the changes.

(closes issue #13547)
Reported by: tecnoxarxa
Patches:
      chan_sip.c.gz uploaded by tecnoxarxa (license 258)
Tested by: tecnoxarxa

........


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@174084 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent c15b83e7
Branches
No related tags found
No related merge requests found
...@@ -18221,19 +18221,32 @@ static int handle_invite_replaces(struct sip_pvt *p, struct sip_request *req, in ...@@ -18221,19 +18221,32 @@ static int handle_invite_replaces(struct sip_pvt *p, struct sip_request *req, in
*/ */
static int sip_uri_params_cmp(const char *input1, const char *input2) static int sip_uri_params_cmp(const char *input1, const char *input2)
{ {
char *params1 = ast_strdupa(input1); char *params1 = NULL;
char *params2 = ast_strdupa(input2); char *params2 = NULL;
char *pos1; char *pos1;
char *pos2; char *pos2;
int zerolength1 = 0;
int zerolength2 = 0;
int maddrmatch = 0; int maddrmatch = 0;
int ttlmatch = 0; int ttlmatch = 0;
int usermatch = 0; int usermatch = 0;
int methodmatch = 0; int methodmatch = 0;
   
if (ast_strlen_zero(input1)) {
zerolength1 = 1;
} else {
params1 = ast_strdupa(input1);
}
if (ast_strlen_zero(input2)) {
zerolength2 = 1;
} else {
params2 = ast_strdupa(input2);
}
/*Quick optimization. If both params are zero-length, then /*Quick optimization. If both params are zero-length, then
* they match * they match
*/ */
if (ast_strlen_zero(params1) && ast_strlen_zero(params2)) { if (zerolength1 && zerolength2) {
return 0; return 0;
} }
   
...@@ -18348,13 +18361,25 @@ fail: ...@@ -18348,13 +18361,25 @@ fail:
*/ */
static int sip_uri_headers_cmp(const char *input1, const char *input2) static int sip_uri_headers_cmp(const char *input1, const char *input2)
{ {
char *headers1 = ast_strdupa(input1); char *headers1 = NULL;
char *headers2 = ast_strdupa(input2); char *headers2 = NULL;
int zerolength1 = ast_strlen_zero(headers1); int zerolength1 = 0;
int zerolength2 = ast_strlen_zero(headers2); int zerolength2 = 0;
int different = 0; int different = 0;
char *header1; char *header1;
   
if (ast_strlen_zero(input1)) {
zerolength1 = 1;
} else {
headers1 = ast_strdupa(input1);
}
if (ast_strlen_zero(input2)) {
zerolength2 = 1;
} else {
headers2 = ast_strdupa(input2);
}
if ((zerolength1 && !zerolength2) || if ((zerolength1 && !zerolength2) ||
(zerolength2 && !zerolength1)) (zerolength2 && !zerolength1))
return 1; return 1;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment