jackc/pgx · error

invalid length for Path

Error message

invalid length for Path: %v

What it means

The textual path format '((x1,y1),...)' or '[(x1,y1),...]' has a 7-byte minimum (two parenthesized point pairs with delimiters). This guard fires before parsing when the source is shorter, so the string cannot possibly be a well-formed path literal.

Solutions

  1. Verify the stored string matches the '((x1,y1),(x2,y2))' path text format
  2. Fix any custom code writing truncated path strings
  3. Use binary format for the column
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pgtype/path.go:217 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of jackc/pgx@ec1a0befd2 (2026-08-04). Data as JSON: /api/errors/ad5bd3d0c600ed77. Report an issue: GitHub.

Appendix: source

Thrown at pgtype/path.go:217

	return scanner.ScanPath(Path{
		P:      points,
		Closed: closed,
		Valid:  true,
	})
}

type scanPlanTextAnyToPathScanner struct{}

func (scanPlanTextAnyToPathScanner) Scan(src []byte, dst any) error {
	scanner := (dst).(PathScanner)

	if src == nil {
		return scanner.ScanPath(Path{})
	}

	if len(src) < 7 {
		return fmt.Errorf("invalid length for Path: %v", len(src))
	}

	closed := src[0] == '('
	points := make([]Vec2, 0)

	// Expected format: ((x1,y1),...,(xn,yn)) or [(x1,y1),...,(xn,yn)]
	str := string(src[1 : len(src)-1])

	for {
		if len(str) == 0 || str[0] != '(' {
			return fmt.Errorf("invalid format for Path")
		}
		body, rest, found := strings.Cut(str[1:], ")")
		if !found {
			return fmt.Errorf("invalid format for Path")
		}

		sx, sy, found := strings.Cut(body, ",")

View on GitHub (pinned to ec1a0befd2)