diff options
author | David Vossel <dvossel@digium.com> | 2010-06-21 20:46:22 +0000 |
---|---|---|
committer | David Vossel <dvossel@digium.com> | 2010-06-21 20:46:22 +0000 |
commit | 462da0585ec38f1b8fa629a0b5a7733d196c2db5 (patch) | |
tree | be45489bf7816862f17788dc7ad8ea1b2531ec47 /channels/sip/reqresp_parser.c | |
parent | 1a7e1aee5eca1d78d7bc97ce38e63cd10c90f018 (diff) |
fixes crash when From header URI is missing "sip:"
(closes issue #17437)
Reported by: klaus3000
Patches:
sip_crash uploaded by dvossel (license 671)
Tested by: klaus3000
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@271553 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/sip/reqresp_parser.c')
-rw-r--r-- | channels/sip/reqresp_parser.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/channels/sip/reqresp_parser.c b/channels/sip/reqresp_parser.c index d589bec9d..446e9637f 100644 --- a/channels/sip/reqresp_parser.c +++ b/channels/sip/reqresp_parser.c @@ -759,6 +759,11 @@ const char *get_calleridname(const char *input, char *output, size_t outputsize) } } + if (*input != '<') { /* if we never found the start of addr-spec then this is invalid */ + *orig_output = '\0'; + return orig_input; + } + /* set NULL while trimming trailing whitespace */ do { *output-- = '\0'; @@ -776,6 +781,7 @@ AST_TEST_DEFINE(get_calleridname_test) const char *overflow1 = " \"quoted-text overflow 1234567890123456789012345678901234567890\" <stuff>"; const char *noendquote = " \"quoted-text no end <stuff>"; const char *addrspec = " \"sip:blah@blah <stuff>"; + const char *no_quotes_no_brackets = "blah@blah"; const char *after_dname; char dname[40]; @@ -830,6 +836,15 @@ AST_TEST_DEFINE(get_calleridname_test) res = AST_TEST_FAIL; } + /* no quotes, no brackets */ + after_dname = get_calleridname(no_quotes_no_brackets, dname, sizeof(dname)); + ast_test_status_update(test, "no_quotes_no_brackets display-name1: %s\nafter: %s\n", dname, after_dname); + if (*dname != '\0' && after_dname != no_quotes_no_brackets) { + ast_test_status_update(test, "detection of addr-spec failed\n"); + res = AST_TEST_FAIL; + } + + return res; } @@ -1065,6 +1080,7 @@ AST_TEST_DEFINE(get_in_brackets_test) char missing_end_quote[] = "\"I'm a quote string <sip:name:secret@host:port;transport=tcp?headers=testblah&headers2=blahblah>"; char name_no_quotes[] = "name not in quotes <sip:name:secret@host:port;transport=tcp?headers=testblah&headers2=blahblah>"; char no_end_bracket[] = "name not in quotes <sip:name:secret@host:port;transport=tcp?headers=testblah&headers2=blahblah"; + char no_name_no_brackets[] = "sip:name@host"; char *uri = NULL; switch (cmd) { @@ -1122,6 +1138,12 @@ AST_TEST_DEFINE(get_in_brackets_test) res = AST_TEST_FAIL; } + /* Test 7, no name, and no brackets. */ + if (!(uri = get_in_brackets(no_name_no_brackets)) || (strcmp(uri, "sip:name@host"))) { + + ast_test_status_update(test, "Test 7 failed. %s\n", uri); + res = AST_TEST_FAIL; + } return res; } |