QL-Win/QuickLook · warning · NotSupportedException
Plugin NOT support deb with ZStd algorithm
Error message
Plugin NOT support deb with ZStd algorithm
What it means
Thrown by DebReader.CreateDecompressionStream when the control.tar member inside a .deb uses Zstandard compression (.tar.zst). The plugin has no Zstd decompressor and rejects it via NotSupportedException.
Source
Thrown at QuickLook.Plugin/QuickLook.Plugin.AppViewer/PackageParsers/Deb/DebReader.cs:142
case ZipCompressionMethod.Deflate:
{
return new GZipStream(stream, CompressionMode.Decompress);
}
case ZipCompressionMethod.BZip2:
{
return new BZip2Stream(stream, CompressionMode.Decompress, false);
}
case ZipCompressionMethod.LZMA:
{
throw new NotSupportedException("Plugin NOT support deb with LZMA algorithm");
}
case ZipCompressionMethod.Xz:
{
return new XZStream(stream);
}
case ZipCompressionMethod.ZStd:
{
throw new NotSupportedException("Plugin NOT support deb with ZStd algorithm");
}
}
return stream;
}
private enum ZipCompressionMethod
{
None = 0,
Deflate = 8,
BZip2 = 12,
LZMA = 14,
ZStd = 93,
Xz = 95,
}
}
View on GitHub (pinned to cb5d9c429c)
Solutions
- Add a Zstd decompressor (e.g. ZstdNet or IronCompress with zstd) to the ZStd case in CreateDecompressionStream.
- Re-compress the control member as gzip or xz if you control the package build.
- Pre-filter the ar member name for .tar.zst and skip / warn before constructing DebReader.
- Catch NotSupportedException and display partial metadata without the control fields.
Example fix
// before
case ZipCompressionMethod.ZStd:
throw new NotSupportedException("Plugin NOT support deb with ZStd algorithm");
// after
case ZipCompressionMethod.ZStd:
return new ZstdDecompressStream(stream); Defensive patterns
Strategy: validation
Validate before calling
// Check the control member name before constructing DebReader.
public static bool DebUsesSupportedCompression(string path)
{
var ar = QuickLook.Plugin.AppViewer.PackageParsers.Deb.ArReader.Read(path);
var ctrl = Array.Find(ar, e => e.FileName.StartsWith("control.tar"));
if (ctrl == null) return true;
string n = ctrl.FileName.ToLowerInvariant();
return !n.EndsWith(".tar.zst"); // ZStd not supported
} Try / catch
try { var reader = new DebReader(path); }
catch (NotSupportedException ex) when (ex.Message.Contains("ZStd"))
{
// Zstandard-compressed control.tar is unsupported;
// show package metadata without control fields or re-compress.
} Prevention
- Re-compress .deb control.tar as gzip or xz when possible.
- Be aware recent Debian/Ubuntu defaults increasingly use zstd.
- Pre-scan the ar member name and warn on .tar.zst before parsing.
- Catch NotSupportedException to degrade gracefully.
When it happens
Trigger: Constructing new DebReader(path) on a Debian package whose ar archive contains a member named control.tar.zst; GetCompressionMethodFromFileName returns ZipCompressionMethod.ZStd, hitting the ZStd case.
Common situations: Recent Debian/Ubuntu releases (Debian 13+, Ubuntu 24.04+) increasingly default to zstd for package data and sometimes control; packages built with dpkg-deb -Zzstd. Users previewing modern packages hit this as Zstd adoption grows.
Related errors
- Plugin NOT support deb with LZMA algorithm
- Not a valid ar file
- {folder} is not writable.
- AppxMetadata/AppxBundleManifest.xml not found
- AppxManifest.xml not found
AI-assisted analysis of QL-Win/QuickLook@cb5d9c429c (2026-08-13).
Data as JSON: /api/errors/6c3f7f83b9b2a309.
Report an issue: GitHub.