{"record":{"id":"e16f36421c785672","repo":"nats-io/nats-server","slug":"mqttconnackrcidentifierrejected","errorCode":"mqttConnAckRCIdentifierRejected","errorMessage":"invalid character in %s %q","messagePattern":"invalid character in (.+?) %q","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/mqtt.go","lineNumber":3891,"sourceCode":"\t// Client ID\n\tc.mqtt.cid, err = r.readString(\"client ID\")\n\tif err != nil {\n\t\treturn 0, nil, err\n\t}\n\t// Spec [MQTT-3.1.3-7]\n\tif c.mqtt.cid == _EMPTY_ {\n\t\tif cp.flags&mqttConnFlagCleanSession == 0 {\n\t\t\treturn mqttConnAckRCIdentifierRejected, nil, errMQTTCIDEmptyNeedsCleanFlag\n\t\t}\n\t\t// Spec [MQTT-3.1.3-6]\n\t\tc.mqtt.cid = nuid.Next()\n\t}\n\t// Spec [MQTT-3.1.3-4] and [MQTT-3.1.3-9]\n\tif err := mqttValidateString(c.mqtt.cid, \"client ID\"); err != nil {\n\t\treturn mqttConnAckRCIdentifierRejected, nil, err\n\t} else if !isValidName(c.mqtt.cid) {\n\t\t// Should not contain characters that make it an invalid name for NATS subjects, etc.\n\t\terr = fmt.Errorf(\"invalid character in %s %q\", \"client ID\", c.mqtt.cid)\n\t\treturn mqttConnAckRCIdentifierRejected, nil, err\n\t}\n\n\tif hasWill {\n\t\tcp.will = &mqttWill{\n\t\t\tqos:    wqos,\n\t\t\tretain: wretain,\n\t\t}\n\t\tvar topic []byte\n\t\t// Need to make a copy since we need to hold to this topic after the\n\t\t// parsing of this protocol.\n\t\ttopic, err = r.readBytes(\"Will topic\", true)\n\t\tif err != nil {\n\t\t\treturn 0, nil, err\n\t\t}\n\t\tif len(topic) == 0 {\n\t\t\treturn 0, nil, errMQTTEmptyWillTopic\n\t\t}","sourceCodeStart":3873,"sourceCodeEnd":3909,"githubUrl":"https://github.com/nats-io/nats-server/blob/3a66a489d262bf89b71a71c955c94920394532f3/server/mqtt.go#L3873-L3909","documentation":"Raised by mqttValidateString when the MQTT client ID (or similar string field) contains characters that are not allowed in an MQTT UTF-8 string (spec MQTT-1.5.3 control/non-character restrictions). The CONNACK identifier-rejected return code accompanies it for client IDs.","triggerScenarios":"Thrown at server/mqtt.go:3891 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Change the client ID to use only valid MQTT UTF-8 characters (no U+0000 or non-characters)","Let the server generate an ID by sending an empty client ID with the clean-session flag"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3a66a489d262bf89b71a71c955c94920394532f3","analyzedAt":"2026-09-02T04:41:54.247Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}