]> git.kaiwu.me - nginx.git/commitdiff
QUIC: handle callback errors in compat.
authorVladimir Khomutov <vl@inspert.ru>
Fri, 22 Sep 2023 15:23:57 +0000 (19:23 +0400)
committerVladimir Khomutov <vl@inspert.ru>
Fri, 22 Sep 2023 15:23:57 +0000 (19:23 +0400)
The error may be triggered in add_handhshake_data() by incorrect transport
parameter sent by client.  The expected behaviour in this case is to close
connection complaining about incorrect parameter.  Currently the connection
just times out.

src/event/quic/ngx_event_quic_openssl_compat.c

index e970cfb9be7362933c0c61ff4eba7b54ed321a3e..cc6b95d482d1670b636bc4128a2342b4e18ad573 100644 (file)
@@ -408,7 +408,9 @@ ngx_quic_compat_message_callback(int write_p, int version, int content_type,
                        "quic compat tx %s len:%uz ",
                        ngx_quic_level_name(level), len);
 
-        (void) com->method->add_handshake_data(ssl, level, buf, len);
+        if (com->method->add_handshake_data(ssl, level, buf, len) != 1) {
+            goto failed;
+        }
 
         break;
 
@@ -420,11 +422,19 @@ ngx_quic_compat_message_callback(int write_p, int version, int content_type,
                            "quic compat %s alert:%ui len:%uz ",
                            ngx_quic_level_name(level), alert, len);
 
-            (void) com->method->send_alert(ssl, level, alert);
+            if (com->method->send_alert(ssl, level, alert) != 1) {
+                goto failed;
+            }
         }
 
         break;
     }
+
+    return;
+
+failed:
+
+    ngx_post_event(&qc->close, &ngx_posted_events);
 }