@@ -131,7 +131,7 @@ void test_prvChecksumIPv6Checks_IncompleteIPv6Packet( void )
131131 BaseType_t usReturn ;
132132 uint8_t pucEthernetBuffer [ ipconfigTCPv6_MSS ];
133133 IPHeader_IPv6_t * pxIPv6Packet ;
134- size_t uxBufferLength = ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER ;
134+ size_t uxBufferLength = ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + 4 ;
135135 struct xPacketSummary xSet ;
136136
137137 memset ( pucEthernetBuffer , 0 , ipconfigTCPv6_MSS );
@@ -205,6 +205,46 @@ void test_prvChecksumIPv6Checks_LargeExtensionHeader( void )
205205 TEST_ASSERT_EQUAL ( 3 , usReturn );
206206}
207207
208+ /**
209+ * @brief Prepare a packet with large extension header length.
210+ * - ipIPv6_EXT_HEADER_ROUTING_HEADER
211+ * - ipIPv6_EXT_HEADER_HOP_BY_HOP
212+ * - ipPROTOCOL_TCP
213+ */
214+ void test_prvChecksumIPv6Checks_IncorrectPayloadLength ( void )
215+ {
216+ BaseType_t usReturn ;
217+ struct xPacketSummary xSet ;
218+ NetworkBufferDescriptor_t * pxNetworkBuffer = prvInitializeNetworkDescriptorWithExtensionHeader ( ipPROTOCOL_TCP );
219+ IPHeader_IPv6_t * pxIPv6Header = ( IPHeader_IPv6_t * ) & ( pxNetworkBuffer -> pucEthernetBuffer [ ipSIZE_OF_ETH_HEADER ] );
220+ size_t uxIndex = ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER ;
221+
222+ /* Modify the extension header */
223+ pxIPv6Header -> ucNextHeader = ipIPv6_EXT_HEADER_HOP_BY_HOP ;
224+ pxNetworkBuffer -> pucEthernetBuffer [ uxIndex ] = ipIPv6_EXT_HEADER_ROUTING_HEADER ;
225+ pxNetworkBuffer -> pucEthernetBuffer [ uxIndex + 1 ] = 5U ; /* Extension header length is set to 200*8 + 8, which is larger than buffer size. */
226+ uxIndex += 8 ;
227+ pxNetworkBuffer -> pucEthernetBuffer [ uxIndex ] = ipPROTOCOL_TCP ;
228+ pxNetworkBuffer -> pucEthernetBuffer [ uxIndex + 1 ] = 0 ;
229+ uxIndex += 8 ;
230+
231+ xSet .pxIPPacket_IPv6 = ( ( const IPHeader_IPv6_t * ) pxNetworkBuffer -> pucEthernetBuffer );
232+ IPHeader_IPv6_t * pxIPPacket_IPv6 = (IPHeader_IPv6_t * ) pxNetworkBuffer -> pucEthernetBuffer ;
233+
234+ /* Incorrect payload length */
235+ pxIPPacket_IPv6 -> usPayloadLength = FreeRTOS_ntohs (20 );
236+
237+ xGetExtensionOrder_ExpectAndReturn ( ipIPv6_EXT_HEADER_HOP_BY_HOP , 0U , 1 );
238+ xGetExtensionOrder_ExpectAndReturn ( ipIPv6_EXT_HEADER_HOP_BY_HOP , ipIPv6_EXT_HEADER_ROUTING_HEADER , 1 );
239+ xGetExtensionOrder_ExpectAndReturn ( ipIPv6_EXT_HEADER_ROUTING_HEADER , ipPROTOCOL_TCP , 2 );
240+ xGetExtensionOrder_ExpectAndReturn ( ipIPv6_EXT_HEADER_ROUTING_HEADER , ipPROTOCOL_TCP , 2 );
241+
242+ usReturn = prvChecksumIPv6Checks ( pxNetworkBuffer -> pucEthernetBuffer , pxNetworkBuffer -> xDataLength , & xSet );
243+
244+ TEST_ASSERT_EQUAL ( 4 , usReturn );
245+ }
246+
247+
208248/**
209249 * @brief Prepare a packet have extension with following order.
210250 * - ipIPv6_EXT_HEADER_ROUTING_HEADER
0 commit comments