@@ -470,6 +470,7 @@ STATIC OtaEventData_t * prvOTAEventBufferGet( void )
470470 {
471471 eventBuffer [ ulIndex ].bufferUsed = true;
472472 pFreeBuffer = & eventBuffer [ ulIndex ];
473+ pFreeBuffer -> dataLength = sizeof ( pFreeBuffer -> data );
473474 break ;
474475 }
475476 }
@@ -616,13 +617,20 @@ STATIC void prvMqttJobCallback( void * pvIncomingPublishCallbackContext,
616617
617618 if ( pData != NULL )
618619 {
619- memcpy ( pData -> data , pxPublishInfo -> pPayload , pxPublishInfo -> payloadLength );
620- pData -> dataLength = pxPublishInfo -> payloadLength ;
621- eventMsg .eventId = OtaAgentEventReceivedJobDocument ;
622- eventMsg .pEventData = pData ;
620+ if ( ( size_t ) pData -> dataLength >= pxPublishInfo -> payloadLength )
621+ {
622+ memcpy ( pData -> data , pxPublishInfo -> pPayload , pxPublishInfo -> payloadLength );
623+ pData -> dataLength = pxPublishInfo -> payloadLength ;
624+ eventMsg .eventId = OtaAgentEventReceivedJobDocument ;
625+ eventMsg .pEventData = pData ;
623626
624- /* Send job document received event. */
625- OTA_SignalEvent ( & eventMsg );
627+ /* Send job document received event. */
628+ OTA_SignalEvent ( & eventMsg );
629+ }
630+ else
631+ {
632+ LogError ( ( "Error: OTA data buffers are too small for the Job message provided.\n" ) );
633+ }
626634 }
627635 else
628636 {
@@ -666,13 +674,20 @@ STATIC void prvMqttDataCallback( void * pvIncomingPublishCallbackContext,
666674
667675 if ( pxData != NULL )
668676 {
669- memcpy ( pxData -> data , pxPublishInfo -> pPayload , pxPublishInfo -> payloadLength );
670- pxData -> dataLength = pxPublishInfo -> payloadLength ;
671- eventMsg .eventId = OtaAgentEventReceivedFileBlock ;
672- eventMsg .pEventData = pxData ;
677+ if ( ( size_t ) pxData -> dataLength >= pxPublishInfo -> payloadLength )
678+ {
679+ memcpy ( pxData -> data , pxPublishInfo -> pPayload , pxPublishInfo -> payloadLength );
680+ pxData -> dataLength = pxPublishInfo -> payloadLength ;
681+ eventMsg .eventId = OtaAgentEventReceivedFileBlock ;
682+ eventMsg .pEventData = pxData ;
673683
674- /* Send job document received event. */
675- OTA_SignalEvent ( & eventMsg );
684+ /* Send file block received event. */
685+ OTA_SignalEvent ( & eventMsg );
686+ }
687+ else
688+ {
689+ LogError ( ( "Error: OTA data buffers are too small for the data message received.\n" ) );
690+ }
676691 }
677692 else
678693 {
@@ -762,6 +777,9 @@ STATIC void prvMQTTUnsubscribeCompleteCallback( MQTTAgentCommandContext_t * pxCo
762777 }
763778}
764779
780+ /*
781+ * Precondition: pTopicFilter is not null.
782+ */
765783STATIC OtaMqttStatus_t prvMQTTSubscribe ( const char * pTopicFilter ,
766784 uint16_t topicFilterLength ,
767785 uint8_t ucQoS )
0 commit comments