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

  1. Add a Zstd decompressor (e.g. ZstdNet or IronCompress with zstd) to the ZStd case in CreateDecompressionStream.
  2. Re-compress the control member as gzip or xz if you control the package build.
  3. Pre-filter the ar member name for .tar.zst and skip / warn before constructing DebReader.
  4. 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

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


AI-assisted analysis of QL-Win/QuickLook@cb5d9c429c (2026-08-13). Data as JSON: /api/errors/6c3f7f83b9b2a309. Report an issue: GitHub.