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

  1. Re-upload the affected file through the chunker driver to regenerate valid metadata (current version writes ver up to 2)
  2. If you control the writer, always set ver to a supported version (1 or 2)
  3. 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

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


AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15). Data as JSON: /api/errors/ed6e86c420c45779. Report an issue: GitHub.