chan_sip.c: Stop handling continuation lines after reading headers

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
13.31
Sean Bright 5 years ago
parent 9ba3bddd37
commit d514fa3300

@ -9833,8 +9833,10 @@ static void lws2sws(struct ast_str *data)
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++;
@ -9842,11 +9844,17 @@ static void lws2sws(struct ast_str *data)
}
/* 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;
@ -9855,8 +9863,11 @@ static void lws2sws(struct ast_str *data)
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;

Loading…
Cancel
Save