diff options
| author | Hermes Agent <hermes@localhost> | 2026-08-12 05:21:12 +0000 |
|---|---|---|
| committer | Hermes Agent <hermes@localhost> | 2026-08-12 05:21:12 +0000 |
| commit | 36d844cb23d5bfbc01874c71ec625892f2e6de67 (patch) | |
| tree | 56d905b2572f18f6d895808dd4ae4dde9808e409 /src | |
| parent | 3a47e14cbe6e15de0758c8bd4233a8d84ff80aa8 (diff) | |
Validate semantic manifest paths
Diffstat (limited to 'src')
| -rw-r--r-- | src/manifest.rs | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/manifest.rs b/src/manifest.rs index bc09073..a68245b 100644 --- a/src/manifest.rs +++ b/src/manifest.rs @@ -32,6 +32,7 @@ impl ArtifactManifest { services.sort_by(|left, right| left.name.cmp(&right.name)); archive_members.sort_by(|left, right| left.path.cmp(&right.path)); validate_file_records(&files)?; + validate_manifest_paths(&files, initrd.as_ref(), &archive_members)?; ensure_unique("package", packages.iter().map(|record| record.name.as_str()))?; ensure_unique("file", files.iter().map(|record| record.path.as_str()))?; ensure_unique("service", services.iter().map(|record| record.name.as_str()))?; @@ -356,6 +357,20 @@ fn link_target(path: &Path) -> Result<String> { Ok(value.to_owned()) } +fn validate_manifest_paths( + files: &[FileRecord], + initrd: Option<&InitrdRecord>, + archive_members: &[ArchiveMemberRecord], +) -> Result<()> { + for path in files.iter().map(|record| record.path.as_str()).chain(archive_members.iter().map(|record| record.path.as_str())) { + portable_path(Path::new(path))?; + } + if let Some(initrd) = initrd { + portable_path(Path::new(&initrd.path))?; + } + Ok(()) +} + fn validate_file_records(records: &[FileRecord]) -> Result<()> { for record in records { match record.kind.as_str() { |