summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2013-11-04 09:05:43 +0000
committerNanang Izzuddin <nanang@teluu.com>2013-11-04 09:05:43 +0000
commitaf9aacf4ba888d6476600c486b6d69a4d269c000 (patch)
tree1abdf25f8e1618410c741c77debaccecf3d1bdae
parent25bc6b7d6ccfdeecf4595cd9aee2847895276e2a (diff)
Fix #1709: Fixed scanner in processing escaped quote right after quote begin.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4641 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjlib-util/src/pjlib-util/scanner.c22
-rw-r--r--pjsip/src/test/uri_test.c21
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);