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
- Add a length range, e.g. "length": "100-200" (bytes per segment).
- If you did not intend fragmentation, delete the whole "fragment" object.
- 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
- Always specify packets, length, and interval together in a fragment block.
- Start from a complete working example when enabling fragmentation.
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
- Interval can't be empty
- Invalid PacketsFrom
- PacketsFrom can't be 0
- LengthMin can't be 0
- unsupported domain strategy: {}
AI-assisted analysis of XTLS/Xray-core@7d214f8b09 (2026-08-15).
Data as JSON: /api/errors/93e7c632dbbca5eb.
Report an issue: GitHub.