@@ -148,16 +148,24 @@ static IOTHUB_CLIENT_RESULT PropertyUpdateFromIotHubCallback(const char* compone
148148static char * CopyPayloadToString (const unsigned char * payload , size_t size )
149149{
150150 char * jsonStr = NULL ;
151- size_t sizeToAllocate = size + 1 ;
152-
153- if (NULL != ( jsonStr = ( char * ) malloc ( sizeToAllocate ) ))
151+ size_t sizeToAllocate = 0 ;
152+
153+ if (( NULL != payload ) && ( size > 0 ) && ( size < SIZE_MAX ))
154154 {
155- memcpy (jsonStr , payload , size );
156- jsonStr [size ] = '\0' ;
155+ sizeToAllocate = size + 1 ;
156+ if (NULL != (jsonStr = (char * )malloc (sizeToAllocate )))
157+ {
158+ memcpy (jsonStr , payload , size );
159+ jsonStr [size ] = '\0' ;
160+ }
161+ else
162+ {
163+ OsConfigLogError (GetLog (), "CopyPayloadToString: out of memory allocating %d bytes" , (int )sizeToAllocate );
164+ }
157165 }
158166 else
159167 {
160- OsConfigLogError (GetLog (), "CopyPayloadToString: out pof memory allocating %d bytes" , ( int ) sizeToAllocate );
168+ OsConfigLogError (GetLog (), "CopyPayloadToString: invalid payload or payload size" );
161169 }
162170
163171 return jsonStr ;
@@ -314,9 +322,9 @@ static void QueueDesiredTwinUpdate(DEVICE_TWIN_UPDATE_STATE updateState, const u
314322
315323 int queueSize = (int )ARRAY_SIZE (g_desiredTwinUpdates );
316324
317- if ((NULL == payload ) || (0 = = size ))
325+ if ((NULL == payload ) || (0 >= size ) || ( SIZE_MAX < = size ))
318326 {
319- OsConfigLogError (GetLog (), "QueueDesiredTwinUpdate failed, no payload to queue (%p, %d)" , payload , (int )size );
327+ OsConfigLogError (GetLog (), "QueueDesiredTwinUpdate failed, no payload to queue or invalid payload size (%p, %d)" , payload , (int )size );
320328 return ;
321329 }
322330
0 commit comments