# HG changeset patch # User Roman Arutyunyan # Date 1605117362 0 # Node ID e167c7b4cff44c4322e4358ec7e88b1f122ef7e4 # Parent 279ad36f2f4b00936651fe1f5ba55eadbfaefa63 QUIC: reallocate qc->dcid on retry. Previously new dcid was generated in the same memory that was allocated for qc->dcid when creating the QUIC connection. However this memory was also referenced by initial_source_connection_id and retry_source_connection_id transport parameters. As a result these parameters changed their values after retry which broke the protocol. diff --git a/src/event/ngx_event_quic.c b/src/event/ngx_event_quic.c --- a/src/event/ngx_event_quic.c +++ b/src/event/ngx_event_quic.c @@ -2158,6 +2158,12 @@ ngx_quic_process_packet(ngx_connection_t ngx_quic_clear_temp_server_ids(c); + qc->dcid.len = NGX_QUIC_SERVER_CID_LEN; + qc->dcid.data = ngx_pnalloc(c->pool, qc->dcid.len); + if (qc->dcid.data == NULL) { + return NGX_ERROR; + } + if (ngx_quic_create_server_id(c, qc->dcid.data) != NGX_OK) { return NGX_ERROR; }