Take the case where current time is very close to, but not yet rolled over. We then add some timeout value causing a rollover on the timeoutMs variable.
We then check if the current time is greater than or equal to the timeout time
current time = 4294957296
timeoutMs = current time + 20000 = 20000
*continue executing*
Current Time = current time + ΔT where ΔT is less than 2^32 - current time
currentTime >= timeoutMs = true until current time rolls over.
In core_mqtt.c, sendBuffer a timeout value is calculated by reading the current time and adding some timeout to that value. https://github.com/FreeRTOS/coreMQTT/blob/58d626a25839ed20b19a57fdff34a41f36dacd05/source/core_mqtt.c#L877
Take the case where current time is very close to, but not yet rolled over. We then add some timeout value causing a rollover on the timeoutMs variable.
We then check if the current time is greater than or equal to the timeout time
https://github.com/FreeRTOS/coreMQTT/blob/58d626a25839ed20b19a57fdff34a41f36dacd05/source/core_mqtt.c#L912
This check will erroneously fail.
For Example: