From 8fcffdc3090985f49e9c2ecb4043d246514bde50 Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Fri, 12 Sep 2025 19:10:32 -0700 Subject: [PATCH] Fetch: added parsing of HTTP version. --- nginx/ngx_js_http.c | 21 +++++++++++++++++++++ nginx/ngx_js_http.h | 3 +++ 2 files changed, 24 insertions(+) diff --git a/nginx/ngx_js_http.c b/nginx/ngx_js_http.c index 92e7b94b..3f52868e 100644 --- a/nginx/ngx_js_http.c +++ b/nginx/ngx_js_http.c @@ -942,6 +942,12 @@ ngx_js_http_parse_status_line(ngx_js_http_parse_t *hp, ngx_buf_t *b) return NGX_ERROR; } + hp->http_major = ch - '0'; + + if (hp->http_major > 1) { + return NGX_ERROR; + } + state = sw_major_digit; break; @@ -956,6 +962,12 @@ ngx_js_http_parse_status_line(ngx_js_http_parse_t *hp, ngx_buf_t *b) return NGX_ERROR; } + hp->http_major = hp->http_major * 10 + (ch - '0'); + + if (hp->http_major > 1) { + return NGX_ERROR; + } + break; /* the first digit of minor HTTP version */ @@ -964,6 +976,7 @@ ngx_js_http_parse_status_line(ngx_js_http_parse_t *hp, ngx_buf_t *b) return NGX_ERROR; } + hp->http_minor = ch - '0'; state = sw_minor_digit; break; @@ -978,6 +991,12 @@ ngx_js_http_parse_status_line(ngx_js_http_parse_t *hp, ngx_buf_t *b) return NGX_ERROR; } + if (hp->http_minor > 99) { + return NGX_ERROR; + } + + hp->http_minor = hp->http_minor * 10 + (ch - '0'); + break; /* HTTP status code */ @@ -1055,6 +1074,8 @@ done: b->pos = p + 1; hp->state = sw_start; + hp->http_version = hp->http_major * 1000 + hp->http_minor; + return NGX_OK; } diff --git a/nginx/ngx_js_http.h b/nginx/ngx_js_http.h index 027d0b21..7adcc130 100644 --- a/nginx/ngx_js_http.h +++ b/nginx/ngx_js_http.h @@ -16,6 +16,9 @@ typedef struct ngx_js_http_s ngx_js_http_t; typedef struct { ngx_uint_t state; + unsigned http_major:16; + unsigned http_minor:16; + ngx_uint_t http_version; ngx_uint_t code; u_char *status_text; u_char *status_text_end; -- 2.47.3