Skip to content

Commit 8be845d

Browse files
committed
fix: support zero-length clientId
1 parent ad72f6a commit 8be845d

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

source/core_mqtt_serializer.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1706,9 +1706,15 @@ MQTTStatus_t MQTT_GetConnectPacketSize( const MQTTConnectInfo_t * pConnectInfo,
17061706
( void * ) pPacketSize ) );
17071707
status = MQTTBadParameter;
17081708
}
1709-
else if( ( pConnectInfo->clientIdentifierLength == 0U ) || ( pConnectInfo->pClientIdentifier == NULL ) )
1709+
else if( ( ( pConnectInfo->clientIdentifierLength == 0U ) || ( pConnectInfo->pClientIdentifier == NULL ) || ( *( pConnectInfo->pClientIdentifier ) == '\0' ) ) &&
1710+
( pConnectInfo->cleanSession == false ) )
17101711
{
1711-
LogError( ( "Mqtt_GetConnectPacketSize() client identifier must be set." ) );
1712+
LogError( ( "Zero-length client identifier requires cleanSession=true per MQTT 3.1.1." ) );
1713+
status = MQTTBadParameter;
1714+
}
1715+
else if( ( pConnectInfo->clientIdentifierLength == 0U ) ^ ( ( pConnectInfo->pClientIdentifier == NULL ) || ( *( pConnectInfo->pClientIdentifier ) == '\0' ) ) )
1716+
{
1717+
LogError( ( "Client ID length and value mismatch." ) );
17121718
status = MQTTBadParameter;
17131719
}
17141720
else if( ( pWillInfo != NULL ) && ( pWillInfo->payloadLength > ( size_t ) UINT16_MAX ) )

0 commit comments

Comments
 (0)