Skip to content

Commit 27ca6ec

Browse files
Fix Null Pointer Dereference in TCP Packet Handling (#36751)
* Fix Null Pointer Dereference in TCP Packet Handling * Fix handle zero messageSize in TCP packet processing * Add test for TCP MessageSize * Modify test * Restyled by clang-format * Modify the position of an if statement * Modify test --------- Co-authored-by: BoB13-Matter <--global> Co-authored-by: Restyled.io <commits@restyled.io>
1 parent b0d0614 commit 27ca6ec

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

src/transport/raw/TCP.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,15 @@ CHIP_ERROR TCPBase::ProcessReceivedBuffer(Inet::TCPEndPoint * endPoint, const Pe
343343
// We have not yet received the complete message.
344344
return CHIP_NO_ERROR;
345345
}
346+
346347
state->mReceived.Consume(kPacketSizeBytes);
348+
349+
if (messageSize == 0)
350+
{
351+
// No payload but considered a valid message. Return success to keep the connection alive.
352+
return CHIP_NO_ERROR;
353+
}
354+
347355
ReturnErrorOnFailure(ProcessSingleMessage(peerAddress, state, messageSize));
348356
}
349357

src/transport/raw/tests/TestTCP.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ constexpr NodeId kSourceNodeId = 123654;
6464
constexpr NodeId kDestinationNodeId = 111222333;
6565
constexpr uint32_t kMessageCounter = 18;
6666

67-
const char PAYLOAD[] = "Hello!";
67+
const char PAYLOAD[] = "Hello!";
68+
const char messageSize_TEST[] = "\x00\x00\x00\x00";
6869

6970
class MockTransportMgrDelegate : public chip::TransportMgrDelegate
7071
{
@@ -633,6 +634,12 @@ TEST_F(TestTCP, CheckProcessReceivedBuffer)
633634
TestData testData[2];
634635
gMockTransportMgrDelegate.SetCallback(TestDataCallbackCheck, testData);
635636

637+
// Test a single packet buffer with zero message size.
638+
System::PacketBufferHandle buf = System::PacketBufferHandle::NewWithData(messageSize_TEST, 4);
639+
ASSERT_NE(&buf, nullptr);
640+
err = TestAccess::ProcessReceivedBuffer(tcp, lEndPoint, lPeerAddress, std::move(buf));
641+
EXPECT_EQ(err, CHIP_NO_ERROR);
642+
636643
// Test a single packet buffer.
637644
gMockTransportMgrDelegate.mReceiveHandlerCallCount = 0;
638645
EXPECT_TRUE(testData[0].Init((const uint32_t[]){ 111, 0 }));

0 commit comments

Comments
 (0)