From 84d6b7af87705b07192486c31dbbf17005dc08c0 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 14 Jun 2018 15:59:05 +0200 Subject: [PATCH] MINOR: h1: make h1_parse_chunk_size() not depend on b_ptr() anymore It's similar to the previous commit so that the function doesn't rely on buf->p anymore. --- include/proto/h1.h | 7 ++++--- src/mux_h2.c | 3 +-- src/proto_http.c | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/proto/h1.h b/include/proto/h1.h index d8b90cb23..b0051e3a9 100644 --- a/include/proto/h1.h +++ b/include/proto/h1.h @@ -175,7 +175,8 @@ static inline int h1_skip_chunk_crlf(const struct buffer *buf, int start, int st return bytes; } -/* Parse the chunk size start at buf->p + start and stops before buf->p + stop. +/* Parse the chunk size start at buf + start and stops before buf + stop. The + * positions are relative to the buffer's head. * It returns the chunk size in and the amount of bytes read this way : * < 0 : error at this position relative to * = 0 : not enough bytes to read a complete chunk size @@ -189,9 +190,9 @@ static inline int h1_skip_chunk_crlf(const struct buffer *buf, int start, int st */ static inline int h1_parse_chunk_size(const struct buffer *buf, int start, int stop, unsigned int *res) { - const char *ptr = b_ptr(buf, start); + const char *ptr = b_peek(buf, start); const char *ptr_old = ptr; - const char *end = buf->data + buf->size; + const char *end = b_wrap(buf); unsigned int chunk = 0; stop -= start; // bytes left diff --git a/src/mux_h2.c b/src/mux_h2.c index 98c97d8bb..e75a2ba64 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -3197,8 +3197,7 @@ static size_t h2s_frt_make_resp_data(struct h2s *h2s, struct buffer *buf, size_t if (h1m->state == HTTP_MSG_CHUNK_SIZE) { unsigned int chunk; - // FIXME: this one still uses the old buffer API and ignores - ret = h1_parse_chunk_size(buf, -max, 0, &chunk); + ret = h1_parse_chunk_size(buf, ofs, ofs + max, &chunk); if (!ret) goto end; diff --git a/src/proto_http.c b/src/proto_http.c index 3904b634a..78e0badd5 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -4142,7 +4142,7 @@ int http_wait_for_request_body(struct stream *s, struct channel *req, int an_bit * TRAILERS state. */ unsigned int chunk; - int ret = h1_parse_chunk_size(req->buf, msg->next, req->buf->i, &chunk); + int ret = h1_parse_chunk_size(req->buf, co_data(req) + msg->next, b_data(req->buf), &chunk); if (!ret) goto missing_data; @@ -6371,7 +6371,7 @@ http_msg_forward_chunked_body(struct stream *s, struct http_msg *msg) * then set ->next to point to the body and switch to * DATA or TRAILERS state. */ - ret = h1_parse_chunk_size(chn->buf, msg->next, chn->buf->i, &chunk); + ret = h1_parse_chunk_size(chn->buf, co_data(chn) + msg->next, b_data(chn->buf), &chunk); if (ret == 0) goto missing_data_or_waiting; if (ret < 0) {