MINOR: h1: make h1_measure_trailers() use an offset and a count
This will be needed by the H2 encoder to restart after wrapping.
diff --git a/include/proto/h1.h b/include/proto/h1.h
index b0051e3..943ac0f 100644
--- a/include/proto/h1.h
+++ b/include/proto/h1.h
@@ -43,7 +43,7 @@
int h1_headers_to_hdr_list(char *start, const char *stop,
struct http_hdr *hdr, unsigned int hdr_num,
struct h1m *h1m);
-int h1_measure_trailers(const struct buffer *buf, unsigned int max);
+int h1_measure_trailers(const struct buffer *buf, unsigned int ofs, unsigned int max);
#define H1_FLG_CTL 0x01
#define H1_FLG_SEP 0x02
diff --git a/src/h1.c b/src/h1.c
index 4361809..12278f4 100644
--- a/src/h1.c
+++ b/src/h1.c
@@ -1209,19 +1209,19 @@
}
/* This function performs a very minimal parsing of the trailers block present
- * in the output part of <buf> for up to <max> bytes, and returns the number of
+ * at offset <ofs> in <buf> for up to <max> bytes, and returns the number of
* bytes to delete to skip the trailers. It may return 0 if it's missing some
* input data, or < 0 in case of parse error (in which case the caller may have
* to decide how to proceed, possibly eating everything).
*/
-int h1_measure_trailers(const struct buffer *buf, unsigned int max)
+int h1_measure_trailers(const struct buffer *buf, unsigned int ofs, unsigned int max)
{
- int count = 0;
+ const char *stop = b_peek(buf, ofs + max);
+ int count = ofs;
while (1) {
const char *p1 = NULL, *p2 = NULL;
const char *start = b_peek(buf, count);
- const char *stop = b_peek(buf, max);
const char *ptr = start;
/* scan current line and stop at LF or CRLF */
@@ -1256,7 +1256,7 @@
break;
/* OK, next line then */
}
- return count;
+ return count - ofs;
}
/* This function skips trailers in the buffer associated with HTTP message
diff --git a/src/mux_h2.c b/src/mux_h2.c
index e75a2ba..63b49c1 100644
--- a/src/mux_h2.c
+++ b/src/mux_h2.c
@@ -3400,7 +3400,7 @@
}
else if (h2s->res.state == HTTP_MSG_TRAILERS) {
/* consume the trailers if any (we don't forward them for now) */
- ret = h1_measure_trailers(buf, buf->o);
+ ret = h1_measure_trailers(buf, 0, buf->o);
if (unlikely((int)ret <= 0)) {
if ((int)ret < 0)