There are two reasons for this. First, the algorithm in Appendix B for
decoding the EncodedClientHelloInner doesn't actually enforce this.
Second, aborting on duplicated extensions is slightly stricter than RFC
8446 requires. It states that "[t]here MUST NOT be more than one
extension of the same type in a given extension block", but doesn't
specify what the receiver does in this case.
There are two reasons for this. First, the algorithm in Appendix B for decoding the EncodedClientHelloInner doesn't actually enforce this. Second, aborting on duplicated extensions is slightly stricter than RFC 8446 requires. It states that "[t]here MUST NOT be more than one extension of the same type in a given extension block", but doesn't specify what the receiver does in this case.