diff src/http/v3/ngx_http_v3_parse.c @ 8455:b0e81f49d7c0 quic

HTTP/3: fixed prefixed integer encoding and decoding. Previously bytes were ordered from MSB to LSB, but the right order is the reverse.
author Roman Arutyunyan <arut@nginx.com>
date Thu, 02 Jul 2020 15:15:55 +0300
parents 032cb35ce758
children c9538aef3211
line wrap: on
line diff
--- a/src/http/v3/ngx_http_v3_parse.c	Mon Jun 29 15:56:14 2020 +0300
+++ b/src/http/v3/ngx_http_v3_parse.c	Thu Jul 02 15:15:55 2020 +0300
@@ -91,6 +91,7 @@
 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 @@
 
     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;
     }