diff --git a/include/proto/h1.h b/include/proto/h1.h index b6c61352e..c82e17ad5 100644 --- a/include/proto/h1.h +++ b/include/proto/h1.h @@ -309,7 +309,7 @@ static inline struct h1m *h1m_init_req(struct h1m *h1m) h1m->flags = H1_MF_NONE; h1m->curr_len = 0; h1m->body_len = 0; - h1m->err_pos = 0; + h1m->err_pos = -2; h1m->err_state = 0; return h1m; } @@ -323,7 +323,7 @@ static inline struct h1m *h1m_init_res(struct h1m *h1m) h1m->flags = H1_MF_RESP; h1m->curr_len = 0; h1m->body_len = 0; - h1m->err_pos = 0; + h1m->err_pos = -2; h1m->err_state = 0; return h1m; } diff --git a/include/types/h1.h b/include/types/h1.h index 81ea3da9f..7edfbd89e 100644 --- a/include/types/h1.h +++ b/include/types/h1.h @@ -143,7 +143,12 @@ enum h1m_state { #define H1_MF_RESP 0x00000004 // this message is the response message -/* basic HTTP/1 message state for use in parsers */ +/* basic HTTP/1 message state for use in parsers. The err_pos field is special, + * it is pre-set to a negative value (-1 or -2), and once non-negative it contains + * the relative position in the message of the first parse error. -2 is used to tell + * the parser that we want to block the invalid message. -1 is used to only perform + * a silent capture. + */ struct h1m { enum h1m_state state; // H1 message state (H1_MSG_*) /* 8 bits available here */