{"record":{"id":"15ca0a021e4db841","repo":"nats-io/nats-server","slug":"processroutedoriginclustermsgargs-bad-or-missing-r","errorCode":null,"errorMessage":"processRoutedOriginClusterMsgArgs Bad or Missing Reply Indicator: '%s'","messagePattern":"processRoutedOriginClusterMsgArgs Bad or Missing Reply Indicator: '(.+?)'","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/route.go","lineNumber":235,"sourceCode":"\t\treturn fmt.Errorf(\"processRoutedOriginClusterMsgArgs Parse Error: '%s'\", args)\n\tcase 5:\n\t\tc.pa.reply = nil\n\t\tc.pa.queues = nil\n\t\tc.pa.hdb = args[3]\n\t\tc.pa.hdr = parseSize(args[3])\n\t\tc.pa.szb = args[4]\n\t\tc.pa.size = parseSize(args[4])\n\tcase 6:\n\t\tc.pa.reply = args[3]\n\t\tc.pa.queues = nil\n\t\tc.pa.hdb = args[4]\n\t\tc.pa.hdr = parseSize(args[4])\n\t\tc.pa.szb = args[5]\n\t\tc.pa.size = parseSize(args[5])\n\tdefault:\n\t\t// args[2] is our reply indicator. Should be + or | normally.\n\t\tif len(args[3]) != 1 {\n\t\t\treturn fmt.Errorf(\"processRoutedOriginClusterMsgArgs Bad or Missing Reply Indicator: '%s'\", args[3])\n\t\t}\n\t\tswitch args[3][0] {\n\t\tcase '+':\n\t\t\tc.pa.reply = args[4]\n\t\tcase '|':\n\t\t\tc.pa.reply = nil\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"processRoutedOriginClusterMsgArgs Bad or Missing Reply Indicator: '%s'\", args[3])\n\t\t}\n\n\t\t// Grab header size.\n\t\tc.pa.hdb = args[len(args)-2]\n\t\tc.pa.hdr = parseSize(c.pa.hdb)\n\n\t\t// Grab size.\n\t\tc.pa.szb = args[len(args)-1]\n\t\tc.pa.size = parseSize(c.pa.szb)\n","sourceCodeStart":217,"sourceCodeEnd":253,"githubUrl":"https://github.com/nats-io/nats-server/blob/3a66a489d262bf89b71a71c955c94920394532f3/server/route.go#L217-L253","documentation":"In the >6-token branch of processRoutedOriginClusterMsgArgs, args[3] is the reply indicator which must be exactly one byte ('+' for reply present, '|' for none). The check len(args[3]) != 1 failed, so the token expected to be the indicator is longer/empty — the argument list is misaligned, typically because an optional reply subject or queue list was omitted or added inconsistently.","triggerScenarios":"Thrown at server/route.go:235 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the sending server builds RMSG args with a single-character reply indicator token","Check cluster peer nats-server versions for protocol disagreement","Inspect the raw arg line to see which optional field shifted the token positions"],"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-08T10:18:20.063Z"}