AlistGo/alist · error
wrong version
Error message
wrong version
What it means
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).
Source
Thrown at drivers/chunker/util.go:233
return data, err
}
func unmarshalMetadata(data []byte) (*chunkMetadata, error) {
if len(data) > maxMetadataSizeWrite {
return nil, errors.New("metadata is too large")
}
if data == nil || len(data) < 2 || data[0] != '{' || data[len(data)-1] != '}' {
return nil, errors.New("invalid json")
}
var meta metadataJSON
if err := json.Unmarshal(data, &meta); err != nil {
return nil, err
}
if meta.Version == nil || meta.Size == nil || meta.ChunkNum == nil {
return nil, errors.New("missing required field")
}
if *meta.Version < 1 {
return nil, errors.New("wrong version")
}
if *meta.Size < 0 {
return nil, errors.New("negative file size")
}
if *meta.ChunkNum < 1 || *meta.ChunkNum > maxSafeChunkNumber {
return nil, errors.New("wrong number of chunks")
}
if meta.MD5 != "" {
if _, err := hex.DecodeString(meta.MD5); err != nil || len(meta.MD5) != 32 {
return nil, errors.New("wrong md5 hash")
}
}
if meta.SHA1 != "" {
if _, err := hex.DecodeString(meta.SHA1); err != nil || len(meta.SHA1) != 40 {
return nil, errors.New("wrong sha1 hash")
}
}
if *meta.Version > chunkerMetadataVerion {View on GitHub (pinned to 843d9dc814)
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
Defensive patterns
Strategy: type-guard
Validate before calling
var probe struct{ Ver *int `json:"ver"` }
if json.Unmarshal(data, &probe) == nil && probe.Ver != nil && *probe.Ver < 1 {
return fmt.Errorf("metadata ver must be >= 1, got %d", *probe.Ver)
} Type guard
func validMetaVersion(data []byte) bool {
var probe struct{ Ver *int `json:"ver"` }
return json.Unmarshal(data, &probe) == nil && probe.Ver != nil && *probe.Ver >= 1
} Prevention
- Never zero-initialize and marshal metadata structs — always set ver explicitly
- Pin driver versions across nodes sharing one remote
When it happens
Trigger: 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.
Common situations: Default-zero values from tools that build JSON with zero-initialized structs; tampering; partial writes leaving stale fields.
Related errors
- missing required field
- negative file size
- unknown metadata version
- remote_path is required
- chunk_size must be positive
AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15).
Data as JSON: /api/errors/ed6e86c420c45779.
Report an issue: GitHub.