# HG changeset patch # User Roman Arutyunyan # Date 1601059615 -10800 # Node ID 0f37b4ef3cd93df061151241c547b647d7bcb034 # Parent 2727d402e5a5e6f0fd5431182dd5f75f361902c6 QUIC: keep the entire packet size in pkt->len. Previously pkt->len kept the length of the packet remainder starting from pkt->raw->pos. diff -r 2727d402e5a5 -r 0f37b4ef3cd9 src/event/ngx_event_quic.c --- a/src/event/ngx_event_quic.c Fri Sep 18 15:53:37 2020 +0300 +++ b/src/event/ngx_event_quic.c Fri Sep 25 21:46:55 2020 +0300 @@ -1676,7 +1676,7 @@ */ /* b->pos is at header end, adjust by actual packet length */ - b->pos += pkt.len; + b->pos = pkt.data + pkt.len; p = ngx_quic_skip_zero_padding(b); } diff -r 2727d402e5a5 -r 0f37b4ef3cd9 src/event/ngx_event_quic_protection.c --- a/src/event/ngx_event_quic_protection.c Fri Sep 18 15:53:37 2020 +0300 +++ b/src/event/ngx_event_quic_protection.c Fri Sep 25 21:46:55 2020 +0300 @@ -997,6 +997,7 @@ uint64_t *largest_pn) { u_char clearflags, *p, *sample; + size_t len; uint8_t badflags; uint64_t pn, lpn; ngx_int_t pnl, rc, key_phase; @@ -1012,6 +1013,7 @@ secret = pkt->secret; p = pkt->raw->pos; + len = pkt->data + pkt->len - p; /* draft-ietf-quic-tls-23#section-5.4.2: * the Packet Number field is assumed to be 4 bytes long @@ -1019,7 +1021,7 @@ * AES-Based and ChaCha20-Based header protections sample 16 bytes */ - if (pkt->len < EVP_GCM_TLS_TAG_LEN + 4) { + if (len < EVP_GCM_TLS_TAG_LEN + 4) { return NGX_DECLINED; } @@ -1062,7 +1064,7 @@ /* packet protection */ in.data = p; - in.len = pkt->len - pnl; + in.len = len - pnl; if (ngx_quic_long_pkt(pkt->flags)) { badflags = clearflags & NGX_QUIC_PKT_LONG_RESERVED_BIT; diff -r 2727d402e5a5 -r 0f37b4ef3cd9 src/event/ngx_event_quic_transport.c --- a/src/event/ngx_event_quic_transport.c Fri Sep 18 15:53:37 2020 +0300 +++ b/src/event/ngx_event_quic_transport.c Fri Sep 25 21:46:55 2020 +0300 @@ -511,7 +511,6 @@ } pkt->raw->pos = p; - pkt->len = end - p; return NGX_OK; } @@ -561,7 +560,7 @@ } pkt->raw->pos = p; - pkt->len = varint; + pkt->len = p + varint - pkt->data; #ifdef NGX_QUIC_DEBUG_PACKETS ngx_quic_hexdump(pkt->log, "quic DCID", pkt->dcid.data, pkt->dcid.len); @@ -600,7 +599,7 @@ } pkt->raw->pos = p; - pkt->len = plen; + pkt->len = p + plen - pkt->data; return NGX_OK; }