jackc/pgx · error

array claims %d elements but only %d bytes remain

Error message

array claims %d elements but only %d bytes remain

What it means

Error "array claims %d elements but only %d bytes remain" thrown in jackc/pgx.

Source

Thrown at pgtype/array_codec.go:275

		oid:        oid,
		formatCode: format,
	}
}

func (c *ArrayCodec) decodeBinary(m *Map, arrayOID uint32, src []byte, array ArraySetter) error {
	r := pgio.NewReader(src)
	var arrayHeader arrayHeader
	err := arrayHeader.DecodeBinary(r)
	if err != nil {
		return err
	}

	elementCount := cardinality(arrayHeader.Dimensions)
	// Each element carries at minimum a 4-byte length header, so elementCount cannot exceed the
	// remaining bytes / 4. This bounds the allocation in SetDimensions and the loop below against a
	// malicious server claiming huge dimensions in a small message.
	if maxElements := r.Remaining() / 4; elementCount > maxElements {
		return fmt.Errorf("array claims %d elements but only %d bytes remain", elementCount, r.Remaining())
	}

	err = array.SetDimensions(arrayHeader.Dimensions)
	if err != nil {
		return err
	}

	if elementCount == 0 {
		return r.Finish()
	}

	elementScanPlan := c.ElementType.Codec.PlanScan(m, c.ElementType.OID, BinaryFormatCode, array.ScanIndex(0))
	if elementScanPlan == nil {
		elementScanPlan = m.PlanScan(c.ElementType.OID, BinaryFormatCode, array.ScanIndex(0))
	}

	for i := range elementCount {
		elem := array.ScanIndex(i)

View on GitHub (pinned to ec1a0befd2)

When it happens

Trigger: Thrown at pgtype/array_codec.go:275 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: /data/errors/2e1cd1a45b9beef4.json. Report an issue: GitHub.