XTLS/Xray-core · error

first padding chunk %d is shorter than header %d

Error message

first padding chunk %d is shorter than header %d

What it means

Error "first padding chunk %d is shorter than header %d" thrown in XTLS/Xray-core.

Source

Thrown at transport/internet/finalmask/xmc/padding.go:179

	}
	if len(chunks) == 0 {
		writeChunkLength := turn.writeChunkLength
		if writeChunkLength == 0 {
			writeChunkLength = paddingBufferLength
		} else if turn.writeChunkMinLength > 0 {
			writeChunkLength, err = randomPaddingTarget(turn.writeChunkMinLength, writeChunkLength)
			if err != nil {
				return fmt.Errorf("select padding write chunk length: %w", err)
			}
		}
		chunks = defaultPaddingChunks(recordLength, writeChunkLength)
		delays = make([]paddingDelayRange, len(chunks))
		for i := 1; i < len(delays); i++ {
			delays[i] = turn.chunkDelay
		}
	}
	if chunks[0] < header.Len() {
		return fmt.Errorf("first padding chunk %d is shorter than header %d", chunks[0], header.Len())
	}

	maxChunkLength := 0
	for _, chunkLength := range chunks {
		if chunkLength < 1 || chunkLength > maxPaddingChunkLength {
			return fmt.Errorf("invalid padding chunk length: %d", chunkLength)
		}
		maxChunkLength = max(maxChunkLength, chunkLength)
	}
	var buffer []byte
	if reusableBuffer == nil {
		buffer = make([]byte, maxChunkLength)
	} else {
		if cap(*reusableBuffer) < maxChunkLength {
			*reusableBuffer = make([]byte, maxChunkLength)
		}
		buffer = (*reusableBuffer)[:maxChunkLength]
		clear(buffer)

View on GitHub (pinned to 7d214f8b09)

When it happens

Trigger: Thrown at transport/internet/finalmask/xmc/padding.go:179 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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