Module: sip-router
Branch: 3.3
Commit: 42f2244abefcb157249e2311914a6d0f47396b5e
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=42f2244abefcb157249e2311914a6d0f47396b5e

Author: Daniel-Constantin Mierla <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
Date:   Fri Nov  9 11:03:46 2012 +0100

core: tcp - proper handling of '\n-' sequence for detecting end of MSRP frame

- in some cases it could go in wrong reading MSRP state
- reported by Gavin Llewellyn
(cherry picked from commit b255c406ba09ff229361a3bc14cc1c9fd076b52e)

---

 tcp_read.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/tcp_read.c b/tcp_read.c
index f73a239..99deef2 100644
--- a/tcp_read.c
+++ b/tcp_read.c
@@ -934,14 +934,16 @@ int tcp_read_headers(struct tcp_connection *c, int* 
read_flags)
                                        if(r->pos - r->start < 10) {
                                                LM_ERR("weird situation when 
reading MSRP frame"
                                                                " - continue 
reading\n");
+                                               /* *p=='\n' */
+                                               r->state=H_MSRP_BODY_LF;
                                                p++;
-                                               r->state=H_MSRP_BODY;
                                                break;
                                        }
                                        if(*(p-1)!='\r') {
                                                /* not ending in '\r\n' - not 
end-line */
+                                               /* *p=='\n' */
+                                               r->state=H_MSRP_BODY_LF;
                                                p++;
-                                               r->state=H_MSRP_BODY;
                                                break;
                                        }
                                        /* locate transaction id in first line
@@ -956,16 +958,18 @@ int tcp_read_headers(struct tcp_connection *c, int* 
read_flags)
                                                        p - 1 /*\r*/ - 1 /* 
'+'|'#'|'$' */ - mtransid.len,
                                                        mtransid.len)!=0) {
                                                /* no match on session id - not 
end-line */
+                                               /* *p=='\n' */
+                                               r->state=H_MSRP_BODY_LF;
                                                p++;
-                                               r->state=H_MSRP_BODY;
                                                break;
                                        }
                                        if(memcmp(p - 1 /*\r*/ - 1 /* 
'+'|'#'|'$' */ - mtransid.len
                                                                - 7 /* 7 x '-' 
*/ - 1 /* '\n' */, "\n-------",
                                                                8)!=0) {
                                                /* no match on "\n-------" - 
not end-line */
+                                               /* *p=='\n' */
+                                               r->state=H_MSRP_BODY_LF;
                                                p++;
-                                               r->state=H_MSRP_BODY;
                                                break;
                                        }
                                        r->state=H_MSRP_FINISH;


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to