@@ -60,7 +60,8 @@ erpc_status_t FramedTransport::receive(MessageBuffer *message)
6060
6161 erpc_assert ((m_crcImpl != NULL ) && (" Uninitialized Crc16 object." != NULL ));
6262
63- if (message->getLength () < reserveHeaderSize ())
63+ // e.g. rpmsg tty may have nullptr and buffer is assigned in receive function.
64+ if ((message->get () != nullptr ) && (message->getLength () < reserveHeaderSize ()))
6465 {
6566 retVal = kErpcStatus_MemoryError ;
6667 }
@@ -72,15 +73,20 @@ erpc_status_t FramedTransport::receive(MessageBuffer *message)
7273
7374 // Receive header first.
7475 retVal = underlyingReceive (message, reserveHeaderSize (), 0 );
75- static_cast <void >(memcpy (&h.m_crcHeader , message->get (), sizeof (h.m_crcHeader )));
76- offset = sizeof (h.m_crcHeader );
77- static_cast <void >(memcpy (&h.m_messageSize , &message->get ()[offset], sizeof (h.m_messageSize )));
78- offset += sizeof (h.m_messageSize );
79- static_cast <void >(memcpy (&h.m_crcBody , &message->get ()[offset], sizeof (h.m_crcBody )));
80- offset += sizeof (h.m_crcBody );
76+ if ((retVal == kErpcStatus_Success ) && (message->getLength () < reserveHeaderSize ()))
77+ {
78+ retVal = kErpcStatus_MemoryError ;
79+ }
8180
8281 if (retVal == kErpcStatus_Success )
8382 {
83+ static_cast <void >(memcpy (&h.m_crcHeader , message->get (), sizeof (h.m_crcHeader )));
84+ offset = sizeof (h.m_crcHeader );
85+ static_cast <void >(memcpy (&h.m_messageSize , &message->get ()[offset], sizeof (h.m_messageSize )));
86+ offset += sizeof (h.m_messageSize );
87+ static_cast <void >(memcpy (&h.m_crcBody , &message->get ()[offset], sizeof (h.m_crcBody )));
88+ offset += sizeof (h.m_crcBody );
89+
8490 ERPC_READ_AGNOSTIC_16 (h.m_crcHeader );
8591 ERPC_READ_AGNOSTIC_16 (h.m_messageSize );
8692 ERPC_READ_AGNOSTIC_16 (h.m_crcBody );
0 commit comments