{"record":{"id":"04f94faa6dde74d0","repo":"can1357/oh-my-pi","slug":"rpm-package-identity-uses-unsupported-payload-04f94f","errorCode":null,"errorMessage":"RPM package '${identity}' uses unsupported payload format '${metadata.payloadFormat}'","messagePattern":"RPM package '(.+?)' uses unsupported payload format '(.+?)'","errorType":"validation","errorClass":"ArchiveError","httpStatus":null,"severity":"error","filePath":"packages/utils/src/ar/rpm.ts","lineNumber":295,"sourceCode":"\t\tif (signatureBodyAndPadding[offset] !== 0) {\n\t\t\tthrow new ArchiveError(\"Invalid RPM package: non-zero signature alignment padding\");\n\t\t}\n\t}\n\n\tconst mainIntroBytes = await readExact(\n\t\tsource,\n\t\tmainHeaderOffset,\n\t\tmainHeaderOffset + RPM_HEADER_INTRO_SIZE,\n\t\t\"main header intro\",\n\t);\n\tconst mainIntro = parseHeaderIntro(mainIntroBytes, options, \"main\");\n\tassertIndexSize(signatureIntro.totalSize + mainIntro.totalSize, options.limits, \"RPM headers\");\n\tconst mainBodyOffset = mainHeaderOffset + RPM_HEADER_INTRO_SIZE;\n\tconst mainBody = await readExact(source, mainBodyOffset, mainBodyOffset + mainIntro.bodySize, \"main header\");\n\tconst metadata = parseMainHeader(mainBody, mainIntro);\n\tconst identity = rpmIdentity(metadata, leadName);\n\tif (metadata.payloadFormat && metadata.payloadFormat.toLowerCase() !== \"cpio\") {\n\t\tthrow new ArchiveError(`RPM package '${identity}' uses unsupported payload format '${metadata.payloadFormat}'`);\n\t}\n\n\tconst payloadOffset = mainHeaderOffset + mainIntro.totalSize;\n\tconst payloadSize = source.size - payloadOffset;\n\tassertInMemorySize(payloadSize, options.limits);\n\tconst payload = await readExact(source, payloadOffset, source.size, \"payload\");\n\tconst cpio = await decompressPayload(payload, metadata, identity, options.limits.maxInMemorySize);\n\tassertInMemorySize(cpio.byteLength, options.limits);\n\treturn readCpioEntriesFromBuffer(cpio, options);\n}\n\n/** Read an RPM lead, headers, compressed payload, and its contained CPIO entries. */\nexport const readRpm: FormatReader = async (source, options) => {\n\ttry {\n\t\treturn await readRpmArchive(source, options);\n\t} catch (error) {\n\t\tif (error instanceof ArchiveError) throw error;\n\t\tthrow new ArchiveError(error instanceof Error ? error.message : String(error));","sourceCodeStart":277,"sourceCodeEnd":313,"githubUrl":"https://github.com/can1357/oh-my-pi/blob/969062200754ea02cfac922e5ebb8c608c079e15/packages/utils/src/ar/rpm.ts#L277-L313","documentation":"The main RPM header advertises a payload format tag (RPMTAG_PAYLOADFORMAT) that is not 'cpio'. This reader only unpacks the traditional cpio payload (optionally compressed), so any other payload container is rejected with a message naming the package identity and offending format.","triggerScenarios":"readRpm on an RPM whose PAYLOADFORMAT header tag is missing-but-nonstandard, e.g. 'ar' (newer rpm 4.20+ unified payloads) or a custom value; the check only passes for 'cpio' case-insensitively.","commonSituations":"Parsing very new distro packages (Fedora/openSUSE moving to non-cpio/ar payloads) with an older reader; enterprise RPMs built with custom payload settings; mislabeled test fixtures.","solutions":["Use packages built with the default cpio payload (rpmbuild default), or downgrade to distro packages that still use cpio.","Upgrade/patch the archive library to support the newer payload format, or extract with external rpm2cpio/bsdtar instead.","If you control the payloadFormat metadata source, confirm the tag value is actually 'cpio' (case-insensitive)."],"exampleFix":"// before\nconst entries = await readRpm(source);\n// after\nconst metadata = await readRpmMetadata(source);\nif (metadata.payloadFormat && metadata.payloadFormat.toLowerCase() !== \"cpio\") {\n  const { stdout } = await $`rpm2cpio pkg.rpm | cpio -idm`.cwd(outDir);\n} else {\n  const entries = await readRpm(source);\n}","handlingStrategy":"validation","validationCode":"// inspect PAYLOADFORMAT before full parse\nconst meta = await readRpmMetadata(source);\nif (meta.payloadFormat && meta.payloadFormat.toLowerCase() !== \"cpio\") {\n  throw new Error(`unsupported payload: ${meta.payloadFormat}`);\n}","typeGuard":null,"tryCatchPattern":"try {\n  const entries = await readRpm(source);\n} catch (err) {\n  if (err instanceof ArchiveError && err.message.includes(\"unsupported payload format\")) {\n    // fall back to external rpm2cpio/bsdtar extraction\n  } else throw err;\n}","preventionTips":["Check the payloadFormat metadata of your package corpus up front","Pin to distro packages still using cpio payloads, or add ar-payload support","Keep a fallback extractor (rpm2cpio | cpio) for modern packages"],"tags":["rpm","archive","unsupported-format"],"backgroundTag":"unsupported-archive-payload-format","analyzedSha":"969062200754ea02cfac922e5ebb8c608c079e15","analyzedAt":"2026-08-31T10:29:35.737Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}