can1357/oh-my-pi · error · ArchiveError
RPM package '${identity}' uses unsupported payload compresso
Error message
RPM package '${identity}' uses unsupported payload compressor '${method}' What it means
decompressPayload's switch reached the default arm: the resolved method string (from sniffing or the declared payload compressor) is not one of gzip/bzip2/xz/zstd/zstdio/lzma/none. The library has no decompressor registered for it and throws with the package identity and the offending method.
Source
Thrown at packages/utils/src/ar/rpm.ts:241
case "gz":
return gzipDecompress(payload, maxOutput);
case "bzip2":
case "bzip":
return bzip2Decompress(payload, maxOutput);
case "xz":
return xzDecompress(payload, maxOutput);
case "zstd":
case "zstdio":
return zstdDecompress(payload, maxOutput);
case "lzma":
if (!sniffLzmaAlone(payload)) throw new ArchiveError(`RPM package '${identity}' has a malformed LZMA payload`);
return lzmaAloneDecompress(payload, maxOutput);
case "none":
if (!sniffCpio(payload))
throw new ArchiveError(`RPM package '${identity}' has an invalid uncompressed CPIO payload`);
return payload;
default:
throw new ArchiveError(`RPM package '${identity}' uses unsupported payload compressor '${method}'`);
}
}
async function readRpmArchive(source: ByteSource, options: FormatReadOptions): Promise<ArchiveIndexEntry[]> {
const initial = await readExact(source, 0, RPM_LEAD_SIZE + RPM_HEADER_INTRO_SIZE, "lead and signature header");
if (!sniffRpm(initial)) throw new ArchiveError("Invalid RPM package: bad lead magic");
const major = initial[4]!;
const packageType = (initial[6]! << 8) | initial[7]!;
if (major < 3 || packageType > 1) throw new ArchiveError("Unsupported RPM package lead version or type");
const signatureType = (initial[78]! << 8) | initial[79]!;
if (signatureType !== RPM_SIGNATURE_TYPE_HEADER) {
throw new ArchiveError(`Unsupported RPM signature type ${signatureType}; only header signatures are supported`);
}
const leadNameEnd = initial.subarray(10, 76).indexOf(0);
const leadNameBytes = initial.subarray(10, leadNameEnd < 0 ? 76 : 10 + leadNameEnd);
let leadName = "unknown package";
try {
const decoded = new TextDecoder("utf-8", { fatal: true }).decode(leadNameBytes);View on GitHub (pinned to 9690622007)
Solutions
- Identify the actual payload format (hexdump the payload region) and confirm it is one the library supports (gzip/bzip2/xz/zstd/lzma/plain cpio).
- Convert the package first: rpm2archive or repack with a supported compressor (rpmbuild --define '%_binary_payload w.bzdio' etc.).
- Use system rpm2cpio | cpio -id to extract contents outside this library.
- If you control packaging, switch CI builds to gzip or xz payloads.
Example fix
// before: readArchive directly on a zck payload const entries = await readArchive(zckRpm); // after: normalize via system tooling when compressor is unsupported if (!SUPPORTED_COMPRESSORS.includes(declaredCompressor)) rpmBuffer = await rpm2archiveConvert(file);
Defensive patterns
Strategy: try-catch
Validate before calling
const meta = await metadata(path);
const supported = new Set(['gzip','bzip2','xz','zstd','zstdio','lzma','none']);
if (meta.payloadCompressor && !supported.has(meta.payloadCompressor)) {
console.warn(`compressor ${meta.payloadCompressor} unsupported; converting via rpm2archive`);
} Try / catch
try {
return await readRpm(path);
} catch (err) {
if (err instanceof ArchiveError && err.message.includes('unsupported payload compressor')) {
return await extractWithRpm2cpio(path); // system-tool fallback
}
throw err;
} Prevention
- Screen repository packages for exotic payload formats (zck) during ingestion.
- Standardize internal builds on gzip or xz payloads.
- Keep an rpm2cpio/rpm2archive fallback path for external packages.
When it happens
Trigger: The declared PayloadCompressor tag or sniffed method yields a value outside the supported switch set (e.g. 'zck', an empty/whitespace string, or an unexpected custom value) and it survives the sniff chain; raised at the switch default.
Common situations: Fedora/openSUSE packages using zchunk compression, vendor-patched rpms with experimental payload formats, or packages where the compressor tag holds an unexpected value the sniff chain did not intercept.
Related errors
- RPM package '${identity}' uses unsupported payload compresso
- ARJ member '${memberPath}' uses unsupported compression meth
- Unsupported RAR5 compression algorithm version ${version}
- Unsupported RAR4 compression method 0x${(record.method + 0x3
- Invalid RPM package: truncated ${what}
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/5655163aac444d44.
Report an issue: GitHub.