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
This commit is contained in:
parent
c5fc1bf39f
commit
31027f33db
|
@ -9869,8 +9869,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++;
|
||||
|
@ -9878,11 +9880,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;
|
||||
|
@ -9891,8 +9899,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…
Reference in New Issue