{"record":{"id":"055e8a3415ad2a80","repo":"juicedata/juicefs","slug":"invalid-range-q-w","errorCode":null,"errorMessage":"invalid range %q: %w","messagePattern":"invalid range %q: %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/vfs/fill.go","lineNumber":231,"sourceCode":"func sendFile(ctx meta.Context, todo chan _file, f _file) error {\n\tselect {\n\tcase todo <- f:\n\t\treturn nil\n\tcase <-ctx.Done():\n\t\treturn ctx.Err()\n\t}\n}\n\nfunc parseRanges(spec string) ([]ByteRange, error) {\n\tvar ranges []ByteRange\n\tfor _, part := range strings.Split(spec, \";\") {\n\t\tsep := strings.IndexByte(part, '-')\n\t\tif sep < 0 {\n\t\t\treturn nil, fmt.Errorf(\"invalid range %q\", part)\n\t\t}\n\t\tstart, err := strconv.ParseUint(part[:sep], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid range %q: %w\", part, err)\n\t\t}\n\t\tend, err := strconv.ParseUint(part[sep+1:], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid range %q: %w\", part, err)\n\t\t}\n\t\tif end <= start {\n\t\t\treturn nil, fmt.Errorf(\"invalid range %q: end must be greater than start\", part)\n\t\t}\n\t\tranges = append(ranges, ByteRange{Start: start, End: end})\n\t}\n\tsort.Slice(ranges, func(i, j int) bool { return ranges[i].Start < ranges[j].Start })\n\tmerged := ranges[:0]\n\tfor _, r := range ranges {\n\t\tif n := len(merged); n > 0 && r.Start <= merged[n-1].End {\n\t\t\tif r.End > merged[n-1].End {\n\t\t\t\tmerged[n-1].End = r.End\n\t\t\t}\n\t\t\tcontinue","sourceCodeStart":213,"sourceCodeEnd":249,"githubUrl":"https://github.com/juicedata/juicefs/blob/c9a67b23e8e08ec23ec331aa6f1675e2319e921c/pkg/vfs/fill.go#L213-L249","documentation":"Returned by parseRanges (used by parallel fill --ranges) when a range token lacks the '-' separator or its start/end values are not valid unsigned integers. Each range must look like 'start-end', e.g. '0-1048575'.","triggerScenarios":"A range part like 'abc-100', '-5-10' or a value above uint64 range passed into the fill/target spec.","commonSituations":"Negative numbers in the spec; non-numeric characters; gigantic numbers exceeding 64-bit.","solutions":["Ensure start is a plain non-negative decimal integer fitting in uint64","Remove sign or non-digit characters","Keep byte offsets within uint64 range"],"exampleFix":"// before\n\"x-100\"\n// after\n\"0-100\"","handlingStrategy":"validation","validationCode":"if _, err := strconv.ParseUint(strings.SplitN(part, \"-\", 2)[0], 10, 64); err != nil { return err }","typeGuard":null,"tryCatchPattern":"if _, err := parseRanges(spec); err != nil { log.Fatalf(\"invalid fill spec: %v\", err) }","preventionTips":["Use plain decimal integers only","Keep offsets within uint64 range","Reject negative or signed numbers at config load"],"tags":["parsing","range","validation"],"backgroundTag":"invalid-argument-format","analyzedSha":"c9a67b23e8e08ec23ec331aa6f1675e2319e921c","analyzedAt":"2026-09-06T17:55:48.476Z","contentChangedAt":"2026-09-06T17:55:48.476Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}