{"record":{"id":"ed6e86c420c45779","repo":"AlistGo/alist","slug":"wrong-version","errorCode":null,"errorMessage":"wrong version","messagePattern":"wrong version","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"drivers/chunker/util.go","lineNumber":233,"sourceCode":"\treturn data, err\n}\n\nfunc unmarshalMetadata(data []byte) (*chunkMetadata, error) {\n\tif len(data) > maxMetadataSizeWrite {\n\t\treturn nil, errors.New(\"metadata is too large\")\n\t}\n\tif data == nil || len(data) < 2 || data[0] != '{' || data[len(data)-1] != '}' {\n\t\treturn nil, errors.New(\"invalid json\")\n\t}\n\tvar meta metadataJSON\n\tif err := json.Unmarshal(data, &meta); err != nil {\n\t\treturn nil, err\n\t}\n\tif meta.Version == nil || meta.Size == nil || meta.ChunkNum == nil {\n\t\treturn nil, errors.New(\"missing required field\")\n\t}\n\tif *meta.Version < 1 {\n\t\treturn nil, errors.New(\"wrong version\")\n\t}\n\tif *meta.Size < 0 {\n\t\treturn nil, errors.New(\"negative file size\")\n\t}\n\tif *meta.ChunkNum < 1 || *meta.ChunkNum > maxSafeChunkNumber {\n\t\treturn nil, errors.New(\"wrong number of chunks\")\n\t}\n\tif meta.MD5 != \"\" {\n\t\tif _, err := hex.DecodeString(meta.MD5); err != nil || len(meta.MD5) != 32 {\n\t\t\treturn nil, errors.New(\"wrong md5 hash\")\n\t\t}\n\t}\n\tif meta.SHA1 != \"\" {\n\t\tif _, err := hex.DecodeString(meta.SHA1); err != nil || len(meta.SHA1) != 40 {\n\t\t\treturn nil, errors.New(\"wrong sha1 hash\")\n\t\t}\n\t}\n\tif *meta.Version > chunkerMetadataVerion {","sourceCodeStart":215,"sourceCodeEnd":251,"githubUrl":"https://github.com/AlistGo/alist/blob/843d9dc8149126976b2625911e45a4d3ffd6f2f5/drivers/chunker/util.go#L215-L251","documentation":"The metadata's ver field must be >= 1. Version 0 (or negative) indicates an invalid or pre-format metadata document — the chunker metadata format starts at version 1, and version is what gates format compatibility (versions above chunkerMetadataVersion=2 are rejected separately).","triggerScenarios":"A metadata file containing \"ver\":0 or \"ver\":-1 (the key present but with a sub-1 value). Encountered when reading a chunked file with hand-edited, corrupted, or foreign-generated metadata.","commonSituations":"Default-zero values from tools that build JSON with zero-initialized structs; tampering; partial writes leaving stale fields.","solutions":["Re-upload the affected file through the chunker driver to regenerate valid metadata (current version writes ver up to 2)","If you control the writer, always set ver to a supported version (1 or 2)","Audit any scripts that touch metadata files on the target storage"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":"var probe struct{ Ver *int `json:\"ver\"` }\nif json.Unmarshal(data, &probe) == nil && probe.Ver != nil && *probe.Ver < 1 {\n    return fmt.Errorf(\"metadata ver must be >= 1, got %d\", *probe.Ver)\n}","typeGuard":"func validMetaVersion(data []byte) bool {\n    var probe struct{ Ver *int `json:\"ver\"` }\n    return json.Unmarshal(data, &probe) == nil && probe.Ver != nil && *probe.Ver >= 1\n}","tryCatchPattern":null,"preventionTips":["Never zero-initialize and marshal metadata structs — always set ver explicitly","Pin driver versions across nodes sharing one remote"],"tags":["chunker","metadata","version","validation"],"backgroundTag":null,"analyzedSha":"843d9dc8149126976b2625911e45a4d3ffd6f2f5","analyzedAt":"2026-08-15T12:14:11.722Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}