lws2sws() does not stop trying to handle header continuation lines
even after all headers have been found. This is problematic if the
first character of a SIP message body is a space or tab character, so
we update to recognize the end of the message header.
ASTERISK-28693 #close
Reported by: Frank Matano
Change-Id: Idec8fa58545cd3fd898cbe0075d76c223f8d33df
int len = ast_str_strlen(data);
int h = 0, t = 0;
int lws = 0;
+ int just_read_eol = 0;
+ int done_with_headers = 0;
- for (; h < len;) {
+ while (h < len) {
/* Eliminate all CRs */
if (msgbuf[h] == '\r') {
h++;
}
/* Check for end-of-line */
if (msgbuf[h] == '\n') {
+ if (just_read_eol) {
+ done_with_headers = 1;
+ } else {
+ just_read_eol = 1;
+ }
/* Check for end-of-message */
if (h + 1 == len)
break;
/* Check for a continuation line */
- if (msgbuf[h + 1] == ' ' || msgbuf[h + 1] == '\t') {
+ if (!done_with_headers
+ && (msgbuf[h + 1] == ' ' || msgbuf[h + 1] == '\t')) {
/* Merge continuation line */
h++;
continue;
msgbuf[t++] = msgbuf[h++];
lws = 0;
continue;
+ } else {
+ just_read_eol = 0;
}
- if (msgbuf[h] == ' ' || msgbuf[h] == '\t') {
+ if (!done_with_headers
+ && (msgbuf[h] == ' ' || msgbuf[h] == '\t')) {
if (lws) {
h++;
continue;