This patch hardens the verification of the HTTP/1.x version line
(i.e. the first line within an HTTP/1.x request) to verify that
the protocol name within the version actually reads "HTTP".

Previously protocols that superficially resembled the wire-format
of HTTP/1.x and having a 4-letter acronym as the protocol name, such
as RTSP would pass this check.

This patch fixes GitHub issue #540, it must be backported to all
supported versions. The legacy, non-HTX parser is affected as well,
a fix must be created for it as well.
---
 src/h1_htx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/h1_htx.c b/src/h1_htx.c
index af18a98b3..0432c9c43 100644
--- a/src/h1_htx.c
+++ b/src/h1_htx.c
@@ -66,7 +66,7 @@ static int h1_process_req_vsn(struct h1m *h1m, union h1_sl 
*sl)
                if (sl->rq.v.len != 8)
                        return 0;
 
-               if (*(sl->rq.v.ptr + 4) != '/' ||
+               if (!istnmatch(sl->rq.v, ist("HTTP/"), 5) ||
                    !isdigit((unsigned char)*(sl->rq.v.ptr + 5)) ||
                    *(sl->rq.v.ptr + 6) != '.' ||
                    !isdigit((unsigned char)*(sl->rq.v.ptr + 7)))
-- 
2.25.1


Reply via email to