changeset 8943:118a34e32121 quic

QUIC: added missing check for backup path existence.
author Vladimir Homutov <vl@nginx.com>
date Thu, 16 Dec 2021 11:42:28 +0300
parents 5c86189a1c1b
children b7284807b4fa
files src/event/quic/ngx_event_quic_migration.c
diffstat 1 files changed, 15 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/event/quic/ngx_event_quic_migration.c
+++ b/src/event/quic/ngx_event_quic_migration.c
@@ -81,6 +81,7 @@ ngx_int_t
 ngx_quic_handle_path_response_frame(ngx_connection_t *c,
     ngx_quic_path_challenge_frame_t *f)
 {
+    ngx_uint_t              rst;
     ngx_queue_t            *q;
     ngx_quic_path_t        *path, *prev;
     ngx_quic_connection_t  *qc;
@@ -127,13 +128,21 @@ valid:
      * unless the only change in the peer's address is its port number.
      */
 
-    prev = qc->backup->path;
+    rst = 1;
+
+    if (qc->backup) {
+        prev = qc->backup->path;
 
-    if (ngx_cmp_sockaddr(prev->sockaddr, prev->socklen,
-                         path->sockaddr, path->socklen, 0)
-        != NGX_OK)
-    {
-        /* address has changed */
+        if (ngx_cmp_sockaddr(prev->sockaddr, prev->socklen,
+                             path->sockaddr, path->socklen, 0)
+            == NGX_OK)
+        {
+            /* address did not change */
+            rst = 0;
+        }
+    }
+
+    if (rst) {
         ngx_memzero(&qc->congestion, sizeof(ngx_quic_congestion_t));
 
         qc->congestion.window = ngx_min(10 * qc->tp.max_udp_payload_size,