XTLS/Xray-core · error
LengthMin can't be 0
Error message
LengthMin can't be 0
What it means
Thrown when the freedom fragment 'length' range has a lower bound of 0. After converting Length.From to LengthMin, Build() rejects zero-length segments because splitting TCP data into zero-byte pieces is invalid. Distinct from the missing-length error: here the range exists but starts at 0.
Source
Thrown at infra/conf/freedom.go:125
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 {
config.Fragment.MaxSplitMin = uint64(c.Fragment.MaxSplit.From)
config.Fragment.MaxSplitMax = uint64(c.Fragment.MaxSplit.To)
}
}
}View on GitHub (pinned to 7d214f8b09)
Solutions
- Set the length lower bound to at least 1, e.g. "100-200".
- Pick realistic MTU-sized ranges (e.g. "100-200" bytes) rather than 0-based ones.
- Validate fragment ranges in your config generator.
Example fix
// before "length": "0-200" // after "length": "100-200"
Defensive patterns
Strategy: validation
Validate before calling
if fragment.Length != nil && fragment.Length.From < 1 {
return errors.New("fragment length range must start at >= 1 byte")
} Prevention
- Never use 0 as the lower bound of fragment length.
- Prefer realistic byte ranges (e.g. 100-200).
When it happens
Trigger: "fragment": {"length": "0-200", ...} — ParseRangeString succeeds, LengthMin becomes 0, and the explicit check fires.
Common situations: Using "0-N" as a shorthand for 'any length'; generator defaults starting ranges at 0.
Related errors
- PacketsFrom can't be 0
- Invalid PacketsFrom
- Length can't be empty
- Interval can't be empty
- rand lengthMin or lengthMax cannot be 0
AI-assisted analysis of XTLS/Xray-core@7d214f8b09 (2026-08-15).
Data as JSON: /api/errors/fc59e2320b36b308.
Report an issue: GitHub.