{"record":{"id":"60171e17e2a9b05c","repo":"nats-io/nats-server","slug":"if-will-flag-is-set-to-0-will-qos-must-be-0-too","errorCode":null,"errorMessage":"if Will flag is set to 0, Will QoS must be 0 too, got %v","messagePattern":"if Will flag is set to 0, Will QoS must be 0 too, got (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/mqtt.go","lineNumber":3832,"sourceCode":"\t// Connect flags\n\tcp.flags, err = r.readByte(\"flags\")\n\tif err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\t// Spec [MQTT-3.1.2-3]\n\tif cp.flags&mqttConnFlagReserved != 0 {\n\t\treturn 0, nil, errMQTTConnFlagReserved\n\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]","sourceCodeStart":3814,"sourceCodeEnd":3850,"githubUrl":"https://github.com/nats-io/nats-server/blob/3a66a489d262bf89b71a71c955c94920394532f3/server/mqtt.go#L3814-L3850","documentation":"MQTT CONNECT flags validation (spec MQTT-3.1.2-13): the Will Flag bit is 0 but the Will QoS bits are non-zero, an illegal combination. The parser extracts wqos from the connect-flags byte and rejects the packet before any session work happens.","triggerScenarios":"Thrown at server/mqtt.go:3832 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the client's CONNECT flags: set Will QoS to 0 when no Will message is used","Use a compliant MQTT client library that encodes the connect flags correctly"],"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"}