summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-07-05 21:42:45 +0000
committerBenny Prijono <bennylp@teluu.com>2006-07-05 21:42:45 +0000
commit3c7408222acbc04151cb7fe2229ce992a6667a3d (patch)
tree3a67ada042969a176ff3ae81fed64def4c6bc75c
parent23b1172e7e04fd5a7b2b5db35a5cd8c06526b82f (diff)
Fixed SIP parsing bugs when in-place escaping is enabled
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@587 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjsip/src/pjsip/sip_parser.c4
-rw-r--r--pjsip/src/test-pjsip/uri_test.c16
2 files changed, 15 insertions, 5 deletions
diff --git a/pjsip/src/pjsip/sip_parser.c b/pjsip/src/pjsip/sip_parser.c
index a0ef3adc..b0fbc0d8 100644
--- a/pjsip/src/pjsip/sip_parser.c
+++ b/pjsip/src/pjsip/sip_parser.c
@@ -362,7 +362,7 @@ static pj_status_t init_parser()
status = pj_cis_dup(&pjsip_PASSWD_SPEC_ESC, &pjsip_PASSWD_SPEC);
PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
- pj_cis_del_str( &pjsip_PASSWD_SPEC, ESCAPED);
+ pj_cis_del_str( &pjsip_PASSWD_SPEC_ESC, ESCAPED);
status = pj_cis_init(&cis_buf, &pjsip_PROBE_USER_HOST_SPEC);
PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
@@ -1104,7 +1104,7 @@ static void int_parse_hparam( pj_scanner *scanner, pj_pool_t *pool,
pj_cis_match(&pjsip_HDR_CHAR_SPEC, *scanner->curptr))
{
parser_get_and_unescape(scanner, pool, &pjsip_HDR_CHAR_SPEC,
- &pjsip_HDR_CHAR_SPEC, hvalue);
+ &pjsip_HDR_CHAR_SPEC_ESC, hvalue);
}
}
}
diff --git a/pjsip/src/test-pjsip/uri_test.c b/pjsip/src/test-pjsip/uri_test.c
index 1d2d9981..d2e55f20 100644
--- a/pjsip/src/test-pjsip/uri_test.c
+++ b/pjsip/src/test-pjsip/uri_test.c
@@ -685,16 +685,26 @@ static pj_status_t do_uri_test(pj_pool_t *pool, struct uri_test *entry)
{
pj_status_t status;
int len;
+ char *input;
pjsip_uri *parsed_uri, *ref_uri;
pj_str_t s1 = {NULL, 0}, s2 = {NULL, 0};
pj_timestamp t1, t2;
- entry->len = pj_native_strlen(entry->str);
+ if (entry->len == 0)
+ entry->len = pj_native_strlen(entry->str);
+
+#if defined(PJSIP_UNESCAPE_IN_PLACE) && PJSIP_UNESCAPE_IN_PLACE!=0
+ input = pj_pool_alloc(pool, entry->len + 1);
+ pj_memcpy(input, entry->str, entry->len);
+ input[entry->len] = '\0';
+#else
+ input = entry->str;
+#endif
/* Parse URI text. */
pj_get_timestamp(&t1);
var.parse_len = var.parse_len + entry->len;
- parsed_uri = pjsip_parse_uri(pool, entry->str, entry->len, 0);
+ parsed_uri = pjsip_parse_uri(pool, input, entry->len, 0);
if (!parsed_uri) {
/* Parsing failed. If the entry says that this is expected, then
* return OK.
@@ -703,7 +713,7 @@ static pj_status_t do_uri_test(pj_pool_t *pool, struct uri_test *entry)
if (status != 0) {
PJ_LOG(3,(THIS_FILE, " uri parse error!\n"
" uri='%s'\n",
- entry->str));
+ input));
}
goto on_return;
}