aboutsummaryrefslogtreecommitdiff
path: root/src/http/v3/ngx_http_v3_parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/http/v3/ngx_http_v3_parse.c')
-rw-r--r--src/http/v3/ngx_http_v3_parse.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/http/v3/ngx_http_v3_parse.c b/src/http/v3/ngx_http_v3_parse.c
index 71a643d70..85491082e 100644
--- a/src/http/v3/ngx_http_v3_parse.c
+++ b/src/http/v3/ngx_http_v3_parse.c
@@ -91,6 +91,7 @@ ngx_int_t
ngx_http_v3_parse_prefix_int(ngx_connection_t *c,
ngx_http_v3_parse_prefix_int_t *st, ngx_uint_t prefix, u_char ch)
{
+ ngx_uint_t mask;
enum {
sw_start = 0,
sw_value
@@ -100,25 +101,25 @@ ngx_http_v3_parse_prefix_int(ngx_connection_t *c,
case sw_start:
- st->mask = (1 << prefix) - 1;
- st->value = (ch & st->mask);
+ mask = (1 << prefix) - 1;
+ st->value = ch & mask;
- if (st->value != st->mask) {
+ if (st->value != mask) {
goto done;
}
- st->value = 0;
+ st->shift = 0;
st->state = sw_value;
break;
case sw_value:
- st->value = (st->value << 7) + (ch & 0x7f);
+ st->value += (ch & 0x7f) << st->shift;
if (ch & 0x80) {
+ st->shift += 7;
break;
}
- st->value += st->mask;
goto done;
}