summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pjsip/src/pjsip/sip_parser.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/pjsip/src/pjsip/sip_parser.c b/pjsip/src/pjsip/sip_parser.c
index 32a511cc..6c322428 100644
--- a/pjsip/src/pjsip/sip_parser.c
+++ b/pjsip/src/pjsip/sip_parser.c
@@ -124,6 +124,8 @@ pj_cis_t pjsip_HOST_SPEC, /* For scanning host part. */
pjsip_PASSWD_SPEC_ESC, /* Variant without escaped char */
pjsip_USER_SPEC, /* User */
pjsip_USER_SPEC_ESC, /* Variant without escaped char */
+ pjsip_USER_SPEC_LENIENT, /* User, with additional '#' char */
+ pjsip_USER_SPEC_LENIENT_ESC,
pjsip_NOT_COMMA_OR_NEWLINE, /* Array separator. */
pjsip_NOT_NEWLINE, /* For eating up header.*/
pjsip_DISPLAY_SPEC; /* Used when searching for display name
@@ -361,6 +363,14 @@ static pj_status_t init_parser()
PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
pj_cis_del_str( &pjsip_USER_SPEC_ESC, ESCAPED);
+ status = pj_cis_dup(&pjsip_USER_SPEC_LENIENT, &pjsip_USER_SPEC);
+ PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
+ pj_cis_add_str(&pjsip_USER_SPEC_LENIENT, "#");
+
+ status = pj_cis_dup(&pjsip_USER_SPEC_LENIENT_ESC, &pjsip_USER_SPEC_ESC);
+ PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
+ pj_cis_add_str(&pjsip_USER_SPEC_LENIENT_ESC, "#");
+
status = pj_cis_dup(&pjsip_PASSWD_SPEC, &pjsip_ALNUM_SPEC);
PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
pj_cis_add_str( &pjsip_PASSWD_SPEC, UNRESERVED ESCAPED PASS);
@@ -1208,8 +1218,8 @@ static int int_is_next_user(pj_scanner *scanner)
static void int_parse_user_pass( pj_scanner *scanner, pj_pool_t *pool,
pj_str_t *user, pj_str_t *pass)
{
- parser_get_and_unescape(scanner, pool, &pjsip_USER_SPEC,
- &pjsip_USER_SPEC_ESC, user);
+ parser_get_and_unescape(scanner, pool, &pjsip_USER_SPEC_LENIENT,
+ &pjsip_USER_SPEC_LENIENT_ESC, user);
if ( *scanner->curptr == ':') {
pj_scan_get_char( scanner );