{"record":{"id":"826cd10669590d04","repo":"nats-io/nats-server","slug":"if-will-flag-is-set-to-1-will-qos-can-be-0-1-or","errorCode":null,"errorMessage":"if Will flag is set to 1, Will QoS can be 0, 1 or 2, got %v","messagePattern":"if Will flag is set to 1, Will QoS can be 0, 1 or 2, got (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/mqtt.go","lineNumber":3841,"sourceCode":"\t}\n\n\tvar hasWill bool\n\twqos := (cp.flags & mqttConnFlagWillQoS) >> 3\n\twretain := cp.flags&mqttConnFlagWillRetain != 0\n\t// Spec [MQTT-3.1.2-11]\n\tif cp.flags&mqttConnFlagWillFlag == 0 {\n\t\t// Spec [MQTT-3.1.2-13]\n\t\tif wqos != 0 {\n\t\t\treturn 0, nil, fmt.Errorf(\"if Will flag is set to 0, Will QoS must be 0 too, got %v\", wqos)\n\t\t}\n\t\t// Spec [MQTT-3.1.2-15]\n\t\tif wretain {\n\t\t\treturn 0, nil, errMQTTWillAndRetainFlag\n\t\t}\n\t} else {\n\t\t// Spec [MQTT-3.1.2-14]\n\t\tif wqos == 3 {\n\t\t\treturn 0, nil, fmt.Errorf(\"if Will flag is set to 1, Will QoS can be 0, 1 or 2, got %v\", wqos)\n\t\t}\n\t\thasWill = true\n\t}\n\n\tif c.mqtt.rejectQoS2Pub && hasWill && wqos == 2 {\n\t\treturn mqttConnAckRCQoS2WillRejected, nil, fmt.Errorf(\"server does not accept QoS2 for Will messages\")\n\t}\n\n\t// Spec [MQTT-3.1.2-19]\n\thasUser := cp.flags&mqttConnFlagUsernameFlag != 0\n\t// Spec [MQTT-3.1.2-21]\n\thasPassword := cp.flags&mqttConnFlagPasswordFlag != 0\n\t// Spec [MQTT-3.1.2-22]\n\tif !hasUser && hasPassword {\n\t\treturn 0, nil, errMQTTPasswordFlagAndNoUser\n\t}\n\n\t// Keep alive","sourceCodeStart":3823,"sourceCodeEnd":3859,"githubUrl":"https://github.com/nats-io/nats-server/blob/3a66a489d262bf89b71a71c955c94920394532f3/server/mqtt.go#L3823-L3859","documentation":"MQTT CONNECT flags validation (spec MQTT-3.1.2-14): the Will Flag is set but the Will QoS value is 3, which is reserved/invalid (only 0, 1 or 2 are allowed for a Will message).","triggerScenarios":"Thrown at server/mqtt.go:3841 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set the Will message QoS to 0, 1 or 2","Regenerate the CONNECT packet with a spec-compliant flags byte"],"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"}