{"record":{"id":"8d37861757b479e8","repo":"nats-io/nats-server","slug":"ssubscribe-protocol-must-contain-at-least-1-topic","errorCode":null,"errorMessage":"%ssubscribe protocol must contain at least 1 topic filter","messagePattern":"(.+?)subscribe protocol must contain at least 1 topic filter","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/mqtt.go","lineNumber":5347,"sourceCode":"\t\tif err != nil {\n\t\t\tc.Errorf(\"invalid topic %q: %v\", topic, err)\n\t\t}\n\t\tif sub {\n\t\t\tqos, err = r.readByte(\"QoS\")\n\t\t\tif err != nil {\n\t\t\t\treturn 0, nil, err\n\t\t\t}\n\t\t\t// Spec [MQTT-3-8.3-4].\n\t\t\tif qos > 2 {\n\t\t\t\treturn 0, nil, fmt.Errorf(\"subscribe QoS value must be 0, 1 or 2, got %v\", qos)\n\t\t\t}\n\t\t}\n\t\tf := &mqttFilter{ttopic: topic, filter: string(filter), qos: qos}\n\t\tfilters = append(filters, f)\n\t}\n\t// Spec [MQTT-3.8.3-3], [MQTT-3.10.3-2]\n\tif len(filters) == 0 {\n\t\treturn 0, nil, fmt.Errorf(\"%ssubscribe protocol must contain at least 1 topic filter\", action)\n\t}\n\treturn pi, filters, nil\n}\n\nfunc mqttSubscribeTrace(pi uint16, filters []*mqttFilter) string {\n\tvar sep string\n\tsb := &strings.Builder{}\n\tsb.WriteString(\"[\")\n\tfor i, f := range filters {\n\t\tsb.WriteString(sep)\n\t\tsb.Write(f.ttopic)\n\t\tsb.WriteString(\" (\")\n\t\tsb.WriteString(f.filter)\n\t\tsb.WriteString(\") QoS=\")\n\t\tsb.WriteString(fmt.Sprintf(\"%v\", f.qos))\n\t\tif i == 0 {\n\t\t\tsep = \", \"\n\t\t}","sourceCodeStart":5329,"sourceCodeEnd":5365,"githubUrl":"https://github.com/nats-io/nats-server/blob/3a66a489d262bf89b71a71c955c94920394532f3/server/mqtt.go#L5329-L5365","documentation":"MQTT SUBSCRIBE/UNSUBSCRIBE parser guard (specs MQTT-3.8.3-3 and MQTT-3.10.3-2): the payload contained no topic filters, but at least one is mandatory. The 'action' verb (un)subscribe is prefixed into the message.","triggerScenarios":"Thrown at server/mqtt.go:5347 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Include at least one topic filter in every SUBSCRIBE/UNSUBSCRIBE packet","Fix the client's packet construction if filters are being dropped"],"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"}