Files
wiicompiled/Launcher/Test-PayloadBoundary.ps1
T
patchzyy ec226e8348 init
2026-08-23 17:10:50 +02:00

44 lines
2.4 KiB
PowerShell

[CmdletBinding()]
param([Parameter(Mandatory)] [string]$PayloadRoot)
$ErrorActionPreference = 'Stop'
$PayloadRoot = [IO.Path]::GetFullPath($PayloadRoot)
if (-not (Test-Path -LiteralPath $PayloadRoot -PathType Container)) { throw "Payload does not exist: $PayloadRoot" }
$forbiddenNames = @(
'WiiCompiled.exe', 'RetroRewind.exe', 'mkw_recompiled.exe',
'main.dol', 'StaticR.rel', 'Code.pul', 'base_translation_sources.bin',
'data_sections_init.cpp', 'data_sections_init_blobs.S', 'mkwii_base_manifest.json',
'generated_func_aliases.cpp', 'translated_function_decls.h'
)
$forbiddenExtensions = @('.iso', '.gcm', '.gcz', '.ciso', '.wbfs', '.wia', '.rvz', '.dol', '.rel', '.pul')
$forbiddenSegments = @(
'\BuildWorkspace\generated\', '\BuildWorkspace\runtime\build\', '\GameAssets\', '\BuildWorkspace\Assets\',
'\BuildWorkspace\PulsarPacks\', '\BuildWorkspace\build\base\', '\BuildWorkspace\build\mods\'
)
$violations = [Collections.Generic.List[string]]::new()
foreach ($file in Get-ChildItem -LiteralPath $PayloadRoot -Recurse -File) {
$rootPrefix = $PayloadRoot.TrimEnd('\') + '\'
if (-not $file.FullName.StartsWith($rootPrefix, [StringComparison]::OrdinalIgnoreCase)) {
throw "Payload enumeration escaped its root: $($file.FullName)"
}
$relative = '\' + $file.FullName.Substring($rootPrefix.Length).Replace('/', '\')
$underCompiler = $relative.StartsWith('\Toolkit\llvm-mingw\', [StringComparison]::OrdinalIgnoreCase)
$underPinnedDependency = $relative.StartsWith('\BuildWorkspace\Dependencies\', [StringComparison]::OrdinalIgnoreCase)
if ($forbiddenNames -contains $file.Name -or $forbiddenExtensions -contains $file.Extension.ToLowerInvariant()) {
$violations.Add($relative)
continue
}
if ($forbiddenSegments | Where-Object { $relative.IndexOf($_, [StringComparison]::OrdinalIgnoreCase) -ge 0 }) {
$violations.Add($relative)
continue
}
if (-not $underCompiler -and -not $underPinnedDependency -and $file.Extension -in @('.obj','.o','.lib','.a')) {
$violations.Add("$relative (precompiled object/library outside the licensed compiler payload)")
}
}
if ($violations.Count -gt 0) {
throw "Release payload contains forbidden game-derived or precompiled artifacts:`n$($violations -join "`n")"
}
Write-Host "Payload boundary audit passed: no translated game executable, game input, generated shard, or generated data was packaged."