grpc-ecosystem/grpc-gateway · error

invalid segment in variable %q: %w

Error message

invalid segment in variable %q: %w

What it means

Parser error from parser.variable: after '{name=' the custom segments inside the variable failed to parse (p.segments errored). The error wraps the underlying segments() failure and names the variable's field path, so a template like '{id=bad~seg}' is rejected.

Source

Thrown at internal/httprule/parse.go:195

	}
	return literal(lit), nil
}

func (p *parser) variable() (segment, error) {
	if _, err := p.accept("{"); err != nil {
		return nil, err
	}

	path, err := p.fieldPath()
	if err != nil {
		return nil, err
	}

	var segs []segment
	if _, err := p.accept("="); err == nil {
		segs, err = p.segments()
		if err != nil {
			return nil, fmt.Errorf("invalid segment in variable %q: %w", path, err)
		}
	} else {
		segs = []segment{wildcard{}}
	}

	if _, err := p.accept("}"); err != nil {
		return nil, fmt.Errorf("unterminated variable segment: %s", path)
	}
	return variable{
		path:     path,
		segments: segs,
	}, nil
}

func (p *parser) fieldPath() (string, error) {
	c, err := p.accept(typeIdent)
	if err != nil {
		return "", err

View on GitHub (pinned to a58a4436a3)

Solutions

  1. Fix the pattern after '=' inside the braces to use only valid literals and wildcards.
  2. Use a plain '{name}' variable (default wildcard) if a custom pattern is unnecessary.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at internal/httprule/parse.go:195 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of grpc-ecosystem/grpc-gateway@a58a4436a3 (2026-09-02). Data as JSON: /api/errors/4d2dd073551bb59f. Report an issue: GitHub.