From 072369e2836cc50d2655057cebdd85346e23f22f Mon Sep 17 00:00:00 2001 From: Zhaofeng Li Date: Tue, 13 Sep 2022 01:34:34 -0600 Subject: [PATCH] Set executable bits for files in EXECUTABLES.txt Partial reimplementation of d3d8aebd1cdf808ea1a177fa443208261cb8e396. --- .../java/com/termux/app/TermuxInstaller.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/app/src/main/java/com/termux/app/TermuxInstaller.java b/app/src/main/java/com/termux/app/TermuxInstaller.java index 304130cd..1c5373ac 100644 --- a/app/src/main/java/com/termux/app/TermuxInstaller.java +++ b/app/src/main/java/com/termux/app/TermuxInstaller.java @@ -183,6 +183,7 @@ final class TermuxInstaller { final byte[] buffer = new byte[8096]; final List> symlinks = new ArrayList<>(50); + final List executables = new ArrayList<>(128); final URL zipUrl = determineZipUrl(bootstrapURL); try (ZipInputStream zipInput = new ZipInputStream(zipUrl.openStream())) { @@ -205,6 +206,12 @@ final class TermuxInstaller { return; } } + } else if (zipEntry.getName().equals("EXECUTABLES.txt")) { + BufferedReader executablesReader = new BufferedReader(new InputStreamReader(zipInput)); + String line; + while ((line = executablesReader.readLine()) != null) { + executables.add(line); + } } else { String zipEntryName = zipEntry.getName(); File targetFile = new File(TERMUX_STAGING_PREFIX_DIR_PATH, zipEntryName); @@ -232,6 +239,19 @@ final class TermuxInstaller { } } + if (!executables.isEmpty()) { + for (String executable : executables) { + //noinspection OctalInteger + try { + Os.chmod(TERMUX_STAGING_PREFIX_DIR + "/" + executable, 0700); + } catch (Throwable t) { + Logger.logError(LOG_TAG, "EXECUTABLES error: " + TERMUX_STAGING_PREFIX_DIR + "/" + executable + t); + } + } + } else { + throw new RuntimeException("Installer: no EXECUTABLES.txt found while extracting environment archive."); + } + if (symlinks.isEmpty()) throw new RuntimeException("No SYMLINKS.txt encountered"); for (Pair symlink : symlinks) {