- in some cases it could go in wrong reading MSRP state
- reported by Gavin Llewellyn
... | ... |
@@ -934,14 +934,16 @@ int tcp_read_headers(struct tcp_connection *c, int* read_flags) |
934 | 934 |
if(r->pos - r->start < 10) { |
935 | 935 |
LM_ERR("weird situation when reading MSRP frame" |
936 | 936 |
" - continue reading\n"); |
937 |
+ /* *p=='\n' */ |
|
938 |
+ r->state=H_MSRP_BODY_LF; |
|
937 | 939 |
p++; |
938 |
- r->state=H_MSRP_BODY; |
|
939 | 940 |
break; |
940 | 941 |
} |
941 | 942 |
if(*(p-1)!='\r') { |
942 | 943 |
/* not ending in '\r\n' - not end-line */ |
944 |
+ /* *p=='\n' */ |
|
945 |
+ r->state=H_MSRP_BODY_LF; |
|
943 | 946 |
p++; |
944 |
- r->state=H_MSRP_BODY; |
|
945 | 947 |
break; |
946 | 948 |
} |
947 | 949 |
/* locate transaction id in first line |
... | ... |
@@ -956,16 +958,18 @@ int tcp_read_headers(struct tcp_connection *c, int* read_flags) |
956 | 958 |
p - 1 /*\r*/ - 1 /* '+'|'#'|'$' */ - mtransid.len, |
957 | 959 |
mtransid.len)!=0) { |
958 | 960 |
/* no match on session id - not end-line */ |
961 |
+ /* *p=='\n' */ |
|
962 |
+ r->state=H_MSRP_BODY_LF; |
|
959 | 963 |
p++; |
960 |
- r->state=H_MSRP_BODY; |
|
961 | 964 |
break; |
962 | 965 |
} |
963 | 966 |
if(memcmp(p - 1 /*\r*/ - 1 /* '+'|'#'|'$' */ - mtransid.len |
964 | 967 |
- 7 /* 7 x '-' */ - 1 /* '\n' */, "\n-------", |
965 | 968 |
8)!=0) { |
966 | 969 |
/* no match on "\n-------" - not end-line */ |
970 |
+ /* *p=='\n' */ |
|
971 |
+ r->state=H_MSRP_BODY_LF; |
|
967 | 972 |
p++; |
968 |
- r->state=H_MSRP_BODY; |
|
969 | 973 |
break; |
970 | 974 |
} |
971 | 975 |
r->state=H_MSRP_FINISH; |