httpd: fix handling of EOF in get_line()
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
ff36bec49b
commit
d0ae4103dd
@ -1194,7 +1194,8 @@ static void send_headers_and_exit(int responseNum)
|
||||
}
|
||||
|
||||
/*
|
||||
* Read from the socket until '\n' or EOF. '\r' chars are removed.
|
||||
* Read from the socket until '\n' or EOF.
|
||||
* '\r' chars are removed.
|
||||
* '\n' is replaced with NUL.
|
||||
* Return number of characters read or 0 if nothing is read
|
||||
* ('\r' and '\n' are not counted).
|
||||
@ -1202,29 +1203,30 @@ static void send_headers_and_exit(int responseNum)
|
||||
*/
|
||||
static int get_line(void)
|
||||
{
|
||||
int count = 0;
|
||||
int count;
|
||||
char c;
|
||||
|
||||
alarm(HEADER_READ_TIMEOUT);
|
||||
count = 0;
|
||||
while (1) {
|
||||
if (hdr_cnt <= 0) {
|
||||
hdr_cnt = safe_read(STDIN_FILENO, hdr_buf, sizeof_hdr_buf);
|
||||
if (hdr_cnt <= 0)
|
||||
break;
|
||||
goto ret;
|
||||
hdr_ptr = hdr_buf;
|
||||
}
|
||||
iobuf[count] = c = *hdr_ptr++;
|
||||
hdr_cnt--;
|
||||
|
||||
c = *hdr_ptr++;
|
||||
if (c == '\r')
|
||||
continue;
|
||||
if (c == '\n') {
|
||||
iobuf[count] = '\0';
|
||||
if (c == '\n')
|
||||
break;
|
||||
}
|
||||
iobuf[count] = c;
|
||||
if (count < (IOBUF_SIZE - 1)) /* check overflow */
|
||||
count++;
|
||||
}
|
||||
ret:
|
||||
iobuf[count] = '\0';
|
||||
return count;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user