[MINOR] http: support wrapping messages in error captures

Error captures did only support contiguous messages. This is annoying
for capturing chunking errors, so let's ensure the function is able to
copy wrapped messages.
diff --git a/src/proto_http.c b/src/proto_http.c
index 670ecd1..2c33a84 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -7222,12 +7222,25 @@
                               struct buffer *buf, struct http_msg *msg,
 			      int state, struct proxy *other_end)
 {
-	es->len = buf->r - (buf->data + msg->som);
-	memcpy(es->buf, buf->data + msg->som, MIN(es->len, sizeof(es->buf)));
+	if (buf->r <= (buf->data + msg->som)) { /* message wraps */
+		int len1 = buf->size - msg->som;
+		es->len = buf->r - (buf->data + msg->som) + buf->size;
+		memcpy(es->buf, buf->data + msg->som, MIN(len1, sizeof(es->buf)));
+		if (es->len > len1 && len1 < sizeof(es->buf))
+			memcpy(es->buf, buf->data, MIN(es->len, sizeof(es->buf)) - len1);
+	}
+	else {
+		es->len = buf->r - (buf->data + msg->som);
+		memcpy(es->buf, buf->data + msg->som, MIN(es->len, sizeof(es->buf)));
+	}
+
 	if (msg->err_pos >= 0)
 		es->pos  = msg->err_pos - msg->som;
-	else
+	else if (buf->lr >= (buf->data + msg->som))
 		es->pos  = buf->lr - (buf->data + msg->som);
+	else
+		es->pos  = buf->lr - (buf->data + msg->som) + buf->size;
+
 	es->when = date; // user-visible date
 	es->sid  = s->uniq_id;
 	es->srv  = s->srv;