XTLS/Xray-core · error

Length can't be empty

Error message

Length can't be empty

What it means

Thrown when the freedom outbound has a fragment block but no 'length' range defined. Fragmentation requires a segment length range; unlike packets/interval there is no default, so a nil Length pointer inside the fragment config is an immediate Build()-time error.

Source

Thrown at infra/conf/freedom.go:120

			// TCP Segmentation (all packets)
			config.Fragment.PacketsFrom = 0
			config.Fragment.PacketsTo = 0
		default:
			// TCP Segmentation (range)
			from, to, err := ParseRangeString(c.Fragment.Packets)
			if err != nil {
				return nil, errors.New("Invalid PacketsFrom").Base(err)
			}
			config.Fragment.PacketsFrom = uint64(from)
			config.Fragment.PacketsTo = uint64(to)
			if config.Fragment.PacketsFrom == 0 {
				return nil, errors.New("PacketsFrom can't be 0")
			}
		}

		{
			if c.Fragment.Length == nil {
				return nil, errors.New("Length can't be empty")
			}
			config.Fragment.LengthMin = uint64(c.Fragment.Length.From)
			config.Fragment.LengthMax = uint64(c.Fragment.Length.To)
			if config.Fragment.LengthMin == 0 {
				return nil, errors.New("LengthMin can't be 0")
			}
		}

		{
			if c.Fragment.Interval == nil {
				return nil, errors.New("Interval can't be empty")
			}
			config.Fragment.IntervalMin = uint64(c.Fragment.Interval.From)
			config.Fragment.IntervalMax = uint64(c.Fragment.Interval.To)
		}

		{
			if c.Fragment.MaxSplit != nil {

View on GitHub (pinned to 7d214f8b09)

Solutions

  1. Add a length range, e.g. "length": "100-200" (bytes per segment).
  2. If you did not intend fragmentation, delete the whole "fragment" object.
  3. Keep packets/length/interval together — all are required once fragment is present (interval likewise).

Example fix

// before
"fragment": {"packets": "1-3", "interval": "10-20"}

// after
"fragment": {"packets": "1-3", "length": "100-200", "interval": "10-20"}
Defensive patterns

Strategy: validation

Validate before calling

if fragment != nil && fragment.Length == nil {
    return errors.New("fragment requires a length range, e.g. '100-200'")
}

Prevention

When it happens

Trigger: "fragment": {"packets": "1-3", "interval": "10-20"} with "length" missing — any fragment object without a "length" key triggers it.

Common situations: Copying a partial fragment example; assuming length defaults to something sensible; JSON key typo like "Length" (parsed case-insensitively by encoding/json, so typo is the usual cause).

Related errors


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