jackc/pgx · error

netip.AddrFromSlice failed

Error message

netip.AddrFromSlice failed

What it means

Binary inet scan plan guard: the address bytes of the inet value (after the family/bits header) could not be converted by netip.AddrFromSlice — the slice is not a valid 4- or 16-byte address despite the outer length check passing earlier. The malformed inet binary representation is the faulty input.

Solutions

  1. Verify the value was encoded by a conformant PostgreSQL server
  2. Check for byte-level corruption of the binary result set
  3. Scan into netip.Prefix via the dedicated plan rather than hand-decoding
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pgtype/inet.go:166 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/06cec82c492ebf23. Report an issue: GitHub.

Appendix: source

Thrown at pgtype/inet.go:166

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

	if src == nil {
		return scanner.ScanNetipPrefix(netip.Prefix{})
	}

	if len(src) != 8 && len(src) != 20 {
		return fmt.Errorf("Received an invalid size for an inet: %d", len(src))
	}

	// ignore family
	bits := src[1]
	// ignore is_cidr
	// ignore addressLength - implicit in length of message

	addr, ok := netip.AddrFromSlice(src[4:])
	if !ok {
		return errors.New("netip.AddrFromSlice failed")
	}

	return scanner.ScanNetipPrefix(netip.PrefixFrom(addr, int(bits)))
}

type scanPlanTextAnyToNetipPrefixScanner struct{}

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

	if src == nil {
		return scanner.ScanNetipPrefix(netip.Prefix{})
	}

	var prefix netip.Prefix
	if bytes.IndexByte(src, '/') == -1 {
		addr, err := netip.ParseAddr(string(src))
		if err != nil {

View on GitHub (pinned to ec1a0befd2)