diff options
-rw-r--r-- | pjlib-util/src/pjlib-util/scanner.c | 22 | ||||
-rw-r--r-- | pjsip/src/test/uri_test.c | 21 |
2 files changed, 30 insertions, 13 deletions
diff --git a/pjlib-util/src/pjlib-util/scanner.c b/pjlib-util/src/pjlib-util/scanner.c index f31a19f5..97230f55 100644 --- a/pjlib-util/src/pjlib-util/scanner.c +++ b/pjlib-util/src/pjlib-util/scanner.c @@ -383,21 +383,17 @@ PJ_DEF(void) pj_scan_get_quotes(pj_scanner *scanner, /* check that no backslash character precedes the end_quote. */ if (*s == end_quote[qpair]) { if (*(s-1) == '\\') { - if (s-2 == scanner->begin) { + char *q = s-2; + char *r = s-2; + + while (r != scanner->begin && *r == '\\') { + --r; + } + /* break from main loop if we have odd number of backslashes */ + if (((unsigned)(q-r) & 0x01) == 1) { break; - } else { - char *q = s-2; - char *r = s-2; - - while (r != scanner->begin && *r == '\\') { - --r; - } - /* break from main loop if we have odd number of backslashes */ - if (((unsigned)(q-r) & 0x01) == 1) { - break; - } - ++s; } + ++s; } else { /* end_quote is not preceeded by backslash. break now. */ break; diff --git a/pjsip/src/test/uri_test.c b/pjsip/src/test/uri_test.c index c647764c..2a806603 100644 --- a/pjsip/src/test/uri_test.c +++ b/pjsip/src/test/uri_test.c @@ -83,6 +83,7 @@ static pjsip_uri *create_uri36( pj_pool_t *pool ); static pjsip_uri *create_uri37( pj_pool_t *pool ); static pjsip_uri *create_uri38( pj_pool_t *pool ); static pjsip_uri *create_uri39( pj_pool_t *pool ); +static pjsip_uri *create_uri40( pj_pool_t *pool ); static pjsip_uri *create_dummy( pj_pool_t *pool ); #define ERR_NOT_EQUAL -1001 @@ -357,6 +358,12 @@ struct uri_test PJ_SUCCESS, "\"User\\\\\" <sip:localhost>", &create_uri39, + }, + { + /* Quoted display name. */ + PJ_SUCCESS, + "\"\\\"User\\\"\" <sip:localhost>", + &create_uri40, } }; @@ -781,6 +788,20 @@ static pjsip_uri *create_uri39(pj_pool_t *pool) return (pjsip_uri*)name_addr; } +/* "\"\\\"User\\\"\" <sip:localhost>" */ +static pjsip_uri *create_uri40(pj_pool_t *pool) +{ + pjsip_name_addr *name_addr = pjsip_name_addr_create(pool); + pjsip_sip_uri *url; + + url = pjsip_sip_uri_create(pool, 0); + name_addr->uri = (pjsip_uri*) url; + + pj_strdup2(pool, &name_addr->display, "\\\"User\\\""); + pj_strdup2(pool, &url->host, "localhost"); + return (pjsip_uri*)name_addr; +} + static pjsip_uri *create_dummy(pj_pool_t *pool) { PJ_UNUSED_ARG(pool); |