]> git.sur5r.net Git - freertos/commitdiff
Introduce sbBYTES_TO_STORE_MESSAGE_LENGTH to allow the number of bytes used to hold...
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 15 Mar 2018 15:51:22 +0000 (15:51 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 15 Mar 2018 15:51:22 +0000 (15:51 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2535 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Source/include/FreeRTOS.h
FreeRTOS/Source/stream_buffer.c

index 2b51f2b8f366b6354c57696b9326bf439eb7abd8..c6f344513beefcc68d6028ee1bcfc938648787ea 100644 (file)
@@ -826,6 +826,13 @@ extern "C" {
        #define configSTACK_DEPTH_TYPE uint16_t\r
 #endif\r
 \r
+#ifndef configMESSAGE_BUFFER_LENGTH_TYPE\r
+       /* Defaults to size_t for backward compatibility, but can be overridden\r
+       in FreeRTOSConfig.h if lengths will always be less than the number of bytes\r
+       in a size_t. */\r
+       #define configMESSAGE_BUFFER_LENGTH_TYPE size_t\r
+#endif\r
+\r
 /* Sanity check the configuration. */\r
 #if( configUSE_TICKLESS_IDLE != 0 )\r
        #if( INCLUDE_vTaskSuspend != 1 )\r
index 9e518907adffa68f9ce855825e8a1f86a179e6ce..ed8baef91b1f0c95fa9b245a0bf7282d1132bfa8 100644 (file)
@@ -129,7 +129,7 @@ that uses task notifications. */
 /*lint -restore (9026) */\r
 \r
 /* The number of bytes used to hold the length of a message in the buffer. */\r
-#define sbBYTES_TO_STORE_MESSAGE_LENGTH ( sizeof( size_t ) )\r
+#define sbBYTES_TO_STORE_MESSAGE_LENGTH ( sizeof( configMESSAGE_BUFFER_LENGTH_TYPE ) )\r
 \r
 /* Bits stored in the ucFlags field of the stream buffer. */\r
 #define sbFLAGS_IS_MESSAGE_BUFFER              ( ( uint8_t ) 1 ) /* Set if the stream buffer was created as a message buffer, in which case it holds discrete messages rather than a stream. */\r
@@ -504,6 +504,9 @@ TimeOut_t xTimeOut;
        if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 )\r
        {\r
                xRequiredSpace += sbBYTES_TO_STORE_MESSAGE_LENGTH;\r
+\r
+               /* Overflow? */\r
+               configASSERT( xRequiredSpace > xDataLengthBytes );\r
        }\r
        else\r
        {\r
@@ -906,6 +909,9 @@ size_t xOriginalTail, xReceivedLength, xNextMessageLength;
                returned to its prior state if the length of the message is too\r
                large for the provided buffer. */\r
                xOriginalTail = pxStreamBuffer->xTail;\r
+               /* Ensure xNextMessageLength is cleared to 0 in case\r
+               sizeof( configMESSAGE_BUFFER_LENGTH_TYPE ) != sizeof( size_t ). */\r
+               xNextMessageLength = 0;\r
                ( void ) prvReadBytesFromBuffer( pxStreamBuffer, ( uint8_t * ) &xNextMessageLength, xBytesToStoreMessageLength, xBytesAvailable );\r
 \r
                /* Reduce the number of bytes available by the number of bytes just\r