nats-io/nats-server · error
processLeafMsgArgs Bad or Missing Reply Indicator: '%s'
Error message
processLeafMsgArgs Bad or Missing Reply Indicator: '%s'
What it means
Leaf-node protocol parse guard: in the long argument form the reply indicator token (args[1]) is not a single '+' or '|' character, so the reply/queue layout of the message is unrecognized.
Source
Thrown at server/leafnode.go:3269
c.pa.arg = arg
switch len(args) {
case 0, 1:
return fmt.Errorf("processLeafMsgArgs Parse Error: '%s'", args)
case 2:
c.pa.reply = nil
c.pa.queues = nil
c.pa.szb = args[1]
c.pa.size = parseSize(args[1])
case 3:
c.pa.reply = args[1]
c.pa.queues = nil
c.pa.szb = args[2]
c.pa.size = parseSize(args[2])
default:
// args[1] is our reply indicator. Should be + or | normally.
if len(args[1]) != 1 {
return fmt.Errorf("processLeafMsgArgs Bad or Missing Reply Indicator: '%s'", args[1])
}
switch args[1][0] {
case '+':
c.pa.reply = args[2]
case '|':
c.pa.reply = nil
default:
return fmt.Errorf("processLeafMsgArgs Bad or Missing Reply Indicator: '%s'", args[1])
}
// Grab size.
c.pa.szb = args[len(args)-1]
c.pa.size = parseSize(c.pa.szb)
// Grab queue names.
if c.pa.reply != nil {
c.pa.queues = args[3 : len(args)-1]
} else {
c.pa.queues = args[2 : len(args)-1]View on GitHub (pinned to 3a66a489d2)
Solutions
- Ensure peers emit only '+' or '|' reply indicators
- Check for version mismatch between leaf nodes
- Inspect raw traffic for corruption
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at server/leafnode.go:3269 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of nats-io/nats-server@3a66a489d2 (2026-09-02).
Data as JSON: /api/errors/ad861640a935ae1c.
Report an issue: GitHub.