ruvnet/ruflo · error · ExtractionError
extracted binary path failed validation: ${validation.errors
Error message
extracted binary path failed validation: ${validation.errors.join('; ') || 'unknown'} What it means
Error "extracted binary path failed validation: ${validation.errors.join('; ') || 'unknown'}" thrown in ruvnet/ruflo.
Source
Thrown at v3/@claude-flow/cli/src/proxy/install.ts:165
const extractDir = path.join(workDir, 'extracted');
await extractArchive(archivePath, extractDir, releaseArchiveExtension(triple));
const extractedBinaryPath = path.join(extractDir, binaryNameInArchive());
if (!fs.existsSync(extractedBinaryPath)) {
throw new ExtractionError(`archive did not contain the expected binary at its root: ${binaryNameInArchive()}`);
}
// Defense in depth: confirm the extracted binary genuinely resolves
// inside extractDir (catches a symlink swap or similar), even though
// we only ever read one specific expected relative path, never an
// archive-listed one (so "zip slip" via arbitrary archive paths isn't
// reachable here in the first place).
const { PathValidator } = await import('@claude-flow/security');
const validator = new PathValidator({ allowedPrefixes: [extractDir] });
const validation = await validator.validate(extractedBinaryPath);
if (!validation.isValid) {
throw new ExtractionError(`extracted binary path failed validation: ${validation.errors.join('; ') || 'unknown'}`);
}
const finalPath = proxyBinaryPath();
fs.mkdirSync(path.dirname(finalPath), { recursive: true, mode: 0o700 });
const tmp = `${finalPath}.tmp`;
fs.copyFileSync(extractedBinaryPath, tmp);
fs.chmodSync(tmp, 0o755);
fs.renameSync(tmp, finalPath);
const liveSha = sha256Hex(fs.readFileSync(finalPath));
const manifest: InstallManifest = {
version: opts.version,
sha256: liveSha,
verifiedAt: new Date().toISOString(),
pubkeyFingerprint: sha256Hex(Buffer.from(PROXY_RELEASE_PUBKEY_PEM)).slice(0, 16),
};
fs.mkdirSync(path.dirname(proxyInstallManifestPath()), { recursive: true });
fs.writeFileSync(proxyInstallManifestPath(), JSON.stringify(manifest, null, 2), { mode: 0o600 });View on GitHub (pinned to 6b01dc5a68)
When it happens
Trigger: Thrown at v3/@claude-flow/cli/src/proxy/install.ts:165 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of ruvnet/ruflo@6b01dc5a68 (2026-08-12).
Data as JSON: /api/errors/056fd89c7fab3269.
Report an issue: GitHub.