Skip to content

Commit 3f385d6

Browse files
authored
fix(build): resolve relative paths and preserve zip execute bits (#217) (#220)
_safe_extractall() now restores Unix execute bits from zip entries, fixing SWIG autogen.sh exit-126 on Linux. CLI-supplied install/build dirs are resolved to absolute paths so cmake never mis-resolves them relative to the source tree. Closes #217
1 parent 796f362 commit 3f385d6

1 file changed

Lines changed: 8 additions & 2 deletions

File tree

src/rdc/_build_renderdoc.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,10 @@ def _safe_extractall(zf: zipfile.ZipFile, dest: Path) -> None:
295295
sys.stderr.write(f"ERROR: zip-slip attempt detected: {member.filename}\n")
296296
raise SystemExit(1)
297297
zf.extract(member, dest)
298+
# Restore Unix execute bits that zipfile.extract() drops.
299+
unix_mode = member.external_attr >> 16
300+
if unix_mode and (unix_mode & 0o111):
301+
target.chmod(target.stat().st_mode | (unix_mode & 0o111))
298302

299303

300304
def download_swig(build_dir: Path) -> None:
@@ -756,8 +760,10 @@ def main(argv: list[str] | None = None) -> None:
756760
args = parser.parse_args(argv)
757761

758762
plat = _platform()
759-
install_dir = Path(args.install_dir) if args.install_dir else default_install_dir()
760-
build_dir = Path(args.build_dir) if args.build_dir else install_dir.parent / "renderdoc-build"
763+
install_dir = Path(args.install_dir).resolve() if args.install_dir else default_install_dir()
764+
build_dir = (
765+
Path(args.build_dir).resolve() if args.build_dir else install_dir.parent / "renderdoc-build"
766+
)
761767

762768
if _artifacts_present(install_dir, plat):
763769
_log(f"renderdoc already exists at {install_dir}/")

0 commit comments

Comments
 (0)