mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-19 21:11:57 -04:00
Fix prvWriteMessageToBuffer on big endian (#391)
prvWriteMessageToBuffer wrote the first sbBYTES_TO_STORE_MESSAGE_LENGTH bytes of the size_t-typed length to the buffer as the data length. While this functions on little endian, it copies the wrong bytes on big endian. This fix converts the length to configMESSAGE_BUFFER_LENGTH_TYPE first, and then copies the exact amount, thus fixing the issue. Additionally it adds an assert to verify the size is not greater than the max value of configMESSAGE_BUFFER_LENGTH_TYPE; previously this would truncate silently. Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
This commit is contained in:
parent
06fb777e43
commit
d649a77128
|
@ -728,17 +728,24 @@ static size_t prvWriteMessageToBuffer( StreamBuffer_t * const pxStreamBuffer,
|
|||
size_t xRequiredSpace )
|
||||
{
|
||||
size_t xNextHead = pxStreamBuffer->xHead;
|
||||
configMESSAGE_BUFFER_LENGTH_TYPE xMessageLength;
|
||||
|
||||
if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 )
|
||||
{
|
||||
/* This is a message buffer, as opposed to a stream buffer. */
|
||||
|
||||
/* Convert xDataLengthBytes to the message length type. */
|
||||
xMessageLength = ( configMESSAGE_BUFFER_LENGTH_TYPE ) xDataLengthBytes;
|
||||
|
||||
/* Ensure the data length given fits within configMESSAGE_BUFFER_LENGTH_TYPE. */
|
||||
configASSERT( ( size_t ) xMessageLength == xDataLengthBytes );
|
||||
|
||||
if( xSpace >= xRequiredSpace )
|
||||
{
|
||||
/* There is enough space to write both the message length and the message
|
||||
* itself into the buffer. Start by writing the length of the data, the data
|
||||
* itself will be written later in this function. */
|
||||
xNextHead = prvWriteBytesToBuffer( pxStreamBuffer, ( const uint8_t * ) &( xDataLengthBytes ), sbBYTES_TO_STORE_MESSAGE_LENGTH, xNextHead );
|
||||
xNextHead = prvWriteBytesToBuffer( pxStreamBuffer, ( const uint8_t * ) &( xMessageLength ), sbBYTES_TO_STORE_MESSAGE_LENGTH, xNextHead );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue