XTLS/Xray-core · error

message size too large: {size}

Error message

message size too large: {size}

What it means

Returned by the DNS TCP reader (RFC 1035 length-prefixed framing) when the 2-byte big-endian size prefix exceeds the internal buffer size (buf.Size, 2KB class default). A single DNS message larger than the buffer cannot be read safely, so the stream is rejected.

Source

Thrown at common/protocol/dns/io.go:100

type TCPReader struct {
	reader *buf.BufferedReader
}

func NewTCPReader(reader buf.Reader) *TCPReader {
	return &TCPReader{
		reader: &buf.BufferedReader{
			Reader: reader,
		},
	}
}

func (r *TCPReader) ReadMessage() (*buf.Buffer, error) {
	size, err := serial.ReadUint16(r.reader)
	if err != nil {
		return nil, err
	}
	if size > buf.Size {
		return nil, errors.New("message size too large: ", size)
	}
	b := buf.New()
	if _, err := b.ReadFullFrom(r.reader, int32(size)); err != nil {
		return nil, err
	}
	return b, nil
}

func (r *TCPReader) Interrupt() {
	common.Interrupt(r.reader)
}

func (r *TCPReader) Close() error {
	return common.Close(r.reader)
}

type MessageWriter interface {
	WriteMessage(msg *buf.Buffer) error

View on GitHub (pinned to 7d214f8b09)

Solutions

  1. Verify the endpoint is actually a DNS server speaking DNS-over-TCP on that port
  2. Check for middleboxes/health probes injecting bytes into the DNS connection
  3. If huge legitimate responses are expected, use a transport with a larger buffer or UDP with EDNS0
Defensive patterns

Strategy: try-catch

Try / catch

msg, err := reader.ReadMessage()
if err != nil {
    reader.Interrupt() // framing broken; abort this DNS stream and reopen
    return nil, err
}

Prevention

When it happens

Trigger: ReadMessage on a TCP DNS stream where the peer declares a message size > buf.Size: usually because the stream is not DNS-over-TCP at all (desync/wrong port), or a crafted oversized message.

Common situations: Pointing the DNS TCP client at a non-DNS service, leftover bytes after a previous malformed message shifting the framing, or EDNS payloads beyond the internal limit.

Related errors


AI-assisted analysis of XTLS/Xray-core@7d214f8b09 (2026-08-15). Data as JSON: /api/errors/caf3b3304ec1d7de. Report an issue: GitHub.