MEDIUM: http: http_parse_chunk_crlf() must not advance the buffer pointer

This function is only a parser, it must start to parse at the next character
and only update the outgoing relative pointers, but not expect the buffer to
be aligned with the next byte to be parsed.

It's important to fix this otherwise we cannot use this function to parse
chunks without starting to forward data.
This commit is contained in:
Willy Tarreau 2014-04-17 11:40:10 +02:00
parent 877e78dbef
commit 0669d7dcf3

View File

@ -2123,7 +2123,7 @@ static inline int http_skip_chunk_crlf(struct http_msg *msg)
* against the correct length.
*/
bytes = 1;
ptr = buf->p;
ptr = b_ptr(buf, msg->next);
if (*ptr == '\r') {
bytes++;
ptr++;
@ -2131,7 +2131,7 @@ static inline int http_skip_chunk_crlf(struct http_msg *msg)
ptr = buf->data;
}
if (bytes > buf->i)
if (msg->next + bytes > buf->i)
return 0;
if (*ptr != '\n') {
@ -2143,7 +2143,8 @@ static inline int http_skip_chunk_crlf(struct http_msg *msg)
if (unlikely(ptr >= buf->data + buf->size))
ptr = buf->data;
/* prepare the CRLF to be forwarded (->sov) */
msg->sov = msg->next = bytes;
msg->sov += bytes;
msg->next += bytes;
msg->msg_state = HTTP_MSG_CHUNK_SIZE;
return 1;
}