mirror of
https://github.com/patchzyy/wiicompiled
synced 2026-09-10 09:11:52 -04:00
44 lines
2.4 KiB
PowerShell
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."
|