Ticket #842: Error parsing status line in sipfrag message body in call transfer scenario (thanks Tomáš Valenta for the report!)
git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@2695 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjsip/src/pjsip/sip_parser.c b/pjsip/src/pjsip/sip_parser.c
index e86cf60..a5a8e03 100644
--- a/pjsip/src/pjsip/sip_parser.c
+++ b/pjsip/src/pjsip/sip_parser.c
@@ -1588,7 +1588,8 @@
PJ_USE_EXCEPTION;
pj_bzero(status_line, sizeof(*status_line));
- pj_scan_init(&scanner, buf, size, 0, &on_syntax_error);
+ pj_scan_init(&scanner, buf, size, PJ_SCAN_AUTOSKIP_WS_HEADER,
+ &on_syntax_error);
PJ_TRY {
int_parse_status_line(&scanner, status_line);
diff --git a/pjsip/src/pjsua-lib/pjsua_call.c b/pjsip/src/pjsua-lib/pjsua_call.c
index 746ef0a..5a34d0e 100644
--- a/pjsip/src/pjsua-lib/pjsua_call.c
+++ b/pjsip/src/pjsua-lib/pjsua_call.c
@@ -3415,7 +3415,7 @@
msg = rdata->msg_info.msg;
body = msg->body;
if (!body) {
- PJ_LOG(4,(THIS_FILE,
+ PJ_LOG(2,(THIS_FILE,
"Warning: received NOTIFY without message body"));
return;
}
@@ -3424,7 +3424,7 @@
if (pj_stricmp2(&body->content_type.type, "message") != 0 ||
pj_stricmp2(&body->content_type.subtype, "sipfrag") != 0)
{
- PJ_LOG(4,(THIS_FILE,
+ PJ_LOG(2,(THIS_FILE,
"Warning: received NOTIFY with non message/sipfrag "
"content"));
return;
@@ -3434,7 +3434,7 @@
status = pjsip_parse_status_line((char*)body->data, body->len,
&status_line);
if (status != PJ_SUCCESS) {
- PJ_LOG(4,(THIS_FILE,
+ PJ_LOG(2,(THIS_FILE,
"Warning: received NOTIFY with invalid "
"message/sipfrag content"));
return;
diff --git a/pjsip/src/test/msg_test.c b/pjsip/src/test/msg_test.c
index 0d922a5..d4a7f14 100644
--- a/pjsip/src/test/msg_test.c
+++ b/pjsip/src/test/msg_test.c
@@ -815,10 +815,17 @@
static pj_status_t simple_test(void)
{
+ char stbuf[] = "SIP/2.0 180 Ringing like it never rings before";
unsigned i;
+ pjsip_status_line st_line;
pj_status_t status;
PJ_LOG(3,(THIS_FILE, " simple test.."));
+
+ status = pjsip_parse_status_line(stbuf, pj_ansi_strlen(stbuf), &st_line);
+ if (status != PJ_SUCCESS)
+ return status;
+
for (i=0; i<PJ_ARRAY_SIZE(test_array); ++i) {
pj_pool_t *pool;
pool = pjsip_endpt_create_pool(endpt, NULL, POOL_SIZE, POOL_SIZE);