diff --git a/src/quic_conn.c b/src/quic_conn.c index 9d167cc8a..8fa28ba2f 100644 --- a/src/quic_conn.c +++ b/src/quic_conn.c @@ -6730,6 +6730,9 @@ static inline int qc_build_frms(struct list *outlist, struct list *inlist, /* This frame was duplicated */ LIST_APPEND(&cf->origin->reflist, &new_cf->ref); new_cf->origin = cf->origin; + /* Detach the remaining CRYPTO frame from its original frame */ + LIST_DEL_INIT(&cf->ref); + cf->origin = NULL; } LIST_APPEND(outlist, &new_cf->list); /* Consume bytes of the current frame. */ @@ -6842,6 +6845,9 @@ static inline int qc_build_frms(struct list *outlist, struct list *inlist, /* This frame was duplicated */ LIST_APPEND(&cf->origin->reflist, &new_cf->ref); new_cf->origin = cf->origin; + /* Detach this STREAM frame from its origin */ + LIST_DEL_INIT(&cf->ref); + cf->origin = NULL; } LIST_APPEND(outlist, &new_cf->list); cf->type |= QUIC_STREAM_FRAME_TYPE_OFF_BIT;