2424 packets at the handshake stages.
2525
2626Future:
27-
28- Add fuzzing for 1-RTT packets.
2927 Add fuzzing for version 2.
3028
3129--*/
@@ -518,7 +516,6 @@ void WriteAckFrame(
518516 Offset,
519517 BufferLength,
520518 Buffer));
521- CXPLAT_FRE_ASSERT (*Offset <= BufferLength);
522519}
523520
524521void WriteHandshakeDoneFrame (
@@ -529,7 +526,6 @@ void WriteHandshakeDoneFrame(
529526{
530527 CXPLAT_FRE_ASSERT (*Offset + 1 <= BufferLength);
531528 Buffer[(*Offset)++] = QUIC_FRAME_HANDSHAKE_DONE ;
532- CXPLAT_FRE_ASSERT (*Offset <= BufferLength);
533529}
534530
535531void WritePingFrame (
@@ -540,7 +536,6 @@ void WritePingFrame(
540536{
541537 CXPLAT_FRE_ASSERT (*Offset + 1 <= BufferLength);
542538 Buffer[(*Offset)++] = QUIC_FRAME_PING ;
543- CXPLAT_FRE_ASSERT (*Offset <= BufferLength);
544539}
545540
546541void WriteConnectionCloseFrame (
@@ -573,7 +568,6 @@ void WriteConnectionCloseFrame(
573568 GetRandomBytes (ReasonLen, Buffer + *Offset);
574569 *Offset += ReasonLen;
575570 }
576- CXPLAT_FRE_ASSERT (*Offset <= BufferLength);
577571}
578572
579573void WriteResetStreamFrame (
@@ -602,7 +596,6 @@ void WriteResetStreamFrame(
602596 CXPLAT_FRE_ASSERT (*Offset + QuicVarIntSize (FinalSize) <= BufferLength);
603597 QuicVarIntEncode (FinalSize, Buffer + *Offset);
604598 *Offset += QuicVarIntSize (FinalSize);
605- CXPLAT_FRE_ASSERT (*Offset <= BufferLength);
606599}
607600
608601void WriteStopSendingFrame (
@@ -625,7 +618,6 @@ void WriteStopSendingFrame(
625618 CXPLAT_FRE_ASSERT (*Offset + QuicVarIntSize (ErrorCode) <= BufferLength);
626619 QuicVarIntEncode (ErrorCode, Buffer + *Offset);
627620 *Offset += QuicVarIntSize (ErrorCode);
628- CXPLAT_FRE_ASSERT (*Offset <= BufferLength);
629621}
630622
631623void WriteMaxDataFrame (
@@ -642,7 +634,6 @@ void WriteMaxDataFrame(
642634 CXPLAT_FRE_ASSERT (*Offset + QuicVarIntSize (MaxData) <= BufferLength);
643635 QuicVarIntEncode (MaxData, Buffer + *Offset);
644636 *Offset += QuicVarIntSize (MaxData);
645- CXPLAT_FRE_ASSERT (*Offset <= BufferLength);
646637}
647638
648639void WriteMaxStreamDataFrame (
@@ -665,7 +656,6 @@ void WriteMaxStreamDataFrame(
665656 CXPLAT_FRE_ASSERT (*Offset + QuicVarIntSize (MaxStreamData) <= BufferLength);
666657 QuicVarIntEncode (MaxStreamData, Buffer + *Offset);
667658 *Offset += QuicVarIntSize (MaxStreamData);
668- CXPLAT_FRE_ASSERT (*Offset <= BufferLength);
669659}
670660
671661void WriteUnknownFrame (
@@ -689,7 +679,6 @@ void WriteUnknownFrame(
689679 GetRandomBytes (PayloadLen, Buffer + *Offset);
690680 *Offset += PayloadLen;
691681 }
692- CXPLAT_FRE_ASSERT (*Offset <= BufferLength);
693682}
694683
695684void WriteStreamFrame (
@@ -745,11 +734,15 @@ void WriteStreamFrame(
745734 ActualDataLength = DataLength + Extra;
746735 }
747736 }
748-
749- CXPLAT_FRE_ASSERT (*Offset + ActualDataLength <= BufferLength);
737+
738+ // Clamp to available buffer space
739+ uint16_t RemainingSpace = BufferLength > *Offset ? (uint16_t )(BufferLength - *Offset) : 0 ;
740+ if (ActualDataLength > RemainingSpace) {
741+ ActualDataLength = RemainingSpace;
742+ }
743+
750744 GetRandomBytes (ActualDataLength, Buffer + *Offset);
751745 *Offset += ActualDataLength;
752- CXPLAT_FRE_ASSERT (*Offset <= BufferLength);
753746}
754747
755748void WriteCryptoFrame (
@@ -789,7 +782,6 @@ void WriteCryptoFrame(
789782 Offset,
790783 BufferLength,
791784 Buffer));
792- CXPLAT_FRE_ASSERT (*Offset <= BufferLength);
793785}
794786
795787void WriteFrames (
@@ -809,7 +801,6 @@ void WriteFrames(
809801 PayloadLength,
810802 BufferSize,
811803 Buffer);
812-
813804 } else if (PacketParams->FrameTypes [i] == QUIC_FRAME_CRYPTO ) {
814805 WriteCryptoFrame (
815806 PayloadLength,
@@ -1022,7 +1013,8 @@ void BuildAndSendLongHeaderPackets(
10221013 CXPLAT_FRE_ASSERT (SendBuffer != nullptr );
10231014 CxPlatZeroMemory (SendBuffer->Buffer , DatagramLength);
10241015
1025- uint16_t PacketLength, HeaderLength;
1016+ uint16_t PacketLength = 0 ;
1017+ uint16_t HeaderLength = 0 ;
10261018 uint64_t PacketNum = PacketParams->PacketNumber ++;
10271019 WriteLongHeaderPacket (
10281020 (uint32_t )PacketNum,
@@ -1177,13 +1169,14 @@ void BuildAndSendShortHeaderPackets(
11771169 CXPLAT_FRE_ASSERT (SendData != nullptr );
11781170
11791171 uint8_t numPacketsSent = 0 ;
1180- while (!CxPlatSendDataIsFull (SendData) && numPacketsSent <= PacketParams->NumPackets ) {
1172+ while (!CxPlatSendDataIsFull (SendData) && numPacketsSent < PacketParams->NumPackets ) {
11811173 QUIC_BUFFER * SendBuffer =
11821174 CxPlatSendDataAllocBuffer (SendData, DatagramLength);
11831175 CXPLAT_FRE_ASSERT (SendBuffer != nullptr );
11841176 CxPlatZeroMemory (SendBuffer->Buffer , DatagramLength);
11851177
1186- uint16_t PacketLength, HeaderLength;
1178+ uint16_t PacketLength = 0 ;
1179+ uint16_t HeaderLength = 0 ;
11871180 uint64_t PacketNum = PacketParams->PacketNumber ++;
11881181 WriteShortHeaderPacket (
11891182 (uint32_t )PacketNum,
0 commit comments