From 563c9c9854f072e3162bea977ced8b7ac40cf57b Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Tue, 12 May 2009 15:55:09 +0000 Subject: Ticket #842: Error parsing status line in sipfrag message body in call transfer scenario (thanks Tomáš Valenta for the report!) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2695 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/src/pjsip/sip_parser.c | 3 ++- pjsip/src/pjsua-lib/pjsua_call.c | 6 +++--- pjsip/src/test/msg_test.c | 7 +++++++ 3 files changed, 12 insertions(+), 4 deletions(-) (limited to 'pjsip') diff --git a/pjsip/src/pjsip/sip_parser.c b/pjsip/src/pjsip/sip_parser.c index e86cf601..a5a8e033 100644 --- a/pjsip/src/pjsip/sip_parser.c +++ b/pjsip/src/pjsip/sip_parser.c @@ -1588,7 +1588,8 @@ PJ_DEF(pj_status_t) pjsip_parse_status_line( char *buf, pj_size_t size, 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 746ef0ad..5a34d0ea 100644 --- a/pjsip/src/pjsua-lib/pjsua_call.c +++ b/pjsip/src/pjsua-lib/pjsua_call.c @@ -3415,7 +3415,7 @@ static void xfer_client_on_evsub_state( pjsip_evsub *sub, pjsip_event *event) 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 @@ static void xfer_client_on_evsub_state( pjsip_evsub *sub, pjsip_event *event) 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 @@ static void xfer_client_on_evsub_state( pjsip_evsub *sub, pjsip_event *event) 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 0d922a5b..d4a7f14b 100644 --- a/pjsip/src/test/msg_test.c +++ b/pjsip/src/test/msg_test.c @@ -815,10 +815,17 @@ static pjsip_msg *create_msg1(pj_pool_t *pool) 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