fix: use temp dir env var only in apps

This commit is contained in:
Skylot
2024-10-10 19:31:06 +01:00
parent 063af8cd62
commit c21cabcba7
15 changed files with 172 additions and 112 deletions
@@ -111,6 +111,7 @@ public final class JadxDecompiler implements Closeable {
reset();
JadxArgsValidator.validate(this);
LOG.info("loading ...");
FileUtils.updateTempRootDir(args.getFilesGetter().getTempDir());
loadPlugins();
loadInputFiles();
@@ -174,6 +175,7 @@ public final class JadxDecompiler implements Closeable {
closeInputs();
closeLoaders();
args.close();
FileUtils.deleteTempRootDir();
}
private void closeInputs() {
@@ -1,5 +1,6 @@
package jadx.core.plugins.files;
import java.nio.file.Files;
import java.nio.file.Path;
import jadx.core.utils.files.FileUtils;
@@ -8,22 +9,35 @@ public class TempFilesGetter implements IJadxFilesGetter {
public static final TempFilesGetter INSTANCE = new TempFilesGetter();
private final Path tempRootDir;
private TempFilesGetter() {
try {
tempRootDir = Files.createTempDirectory("jadx-temp-");
tempRootDir.toFile().deleteOnExit();
} catch (Exception e) {
throw new RuntimeException("Failed to create temp directory", e);
}
}
@Override
public Path getConfigDir() {
return FileUtils.getTempRootDir().resolve("config");
return makeSubDir("config");
}
@Override
public Path getCacheDir() {
return FileUtils.getTempRootDir().resolve("cache");
return makeSubDir("cache");
}
@Override
public Path getTempDir() {
return FileUtils.getTempRootDir().resolve("temp");
return tempRootDir;
}
private TempFilesGetter() {
// singleton
private Path makeSubDir(String subDir) {
Path dir = tempRootDir.resolve(subDir);
FileUtils.makeDirs(dir);
return dir;
}
}
@@ -45,7 +45,31 @@ public class FileUtils {
public static final String JADX_TMP_INSTANCE_PREFIX = "jadx-instance-";
public static final String JADX_TMP_PREFIX = "jadx-tmp-";
private static Path tempRootDir = createTempRootDir();
private FileUtils() {
// utility class
}
public static synchronized Path updateTempRootDir(Path newTempRootDir) {
try {
Path dir = Files.createTempDirectory(newTempRootDir, JADX_TMP_INSTANCE_PREFIX);
tempRootDir = dir;
dir.toFile().deleteOnExit();
return dir;
} catch (Exception e) {
throw new JadxRuntimeException("Failed to update temp root directory", e);
}
}
private static Path createTempRootDir() {
try {
Path dir = Files.createTempDirectory(JADX_TMP_INSTANCE_PREFIX);
dir.toFile().deleteOnExit();
return dir;
} catch (Exception e) {
throw new JadxRuntimeException("Failed to create temp root directory", e);
}
}
public static List<Path> expandDirs(List<Path> paths) {
@@ -150,40 +174,13 @@ public class FileUtils {
}
}
private static final Path TEMP_ROOT_DIR = createTempRootDir();
private static Path createTempRootDir() {
try {
String jadxTmpDir = System.getenv("JADX_TMP_DIR");
Path dir;
if (jadxTmpDir != null) {
dir = Files.createTempDirectory(Paths.get(jadxTmpDir), "jadx-instance-");
} else {
dir = Files.createTempDirectory(JADX_TMP_INSTANCE_PREFIX);
}
dir.toFile().deleteOnExit();
return dir;
} catch (Exception e) {
throw new JadxRuntimeException("Failed to create temp root directory", e);
}
}
public static Path getTempRootDir() {
return TEMP_ROOT_DIR;
}
public static void deleteTempRootDir() {
deleteDirIfExists(TEMP_ROOT_DIR);
}
public static void clearTempRootDir() {
deleteDirIfExists(TEMP_ROOT_DIR);
makeDirs(TEMP_ROOT_DIR);
deleteDirIfExists(tempRootDir);
}
public static Path createTempDir(String prefix) {
try {
Path dir = Files.createTempDirectory(TEMP_ROOT_DIR, prefix);
Path dir = Files.createTempDirectory(tempRootDir, prefix);
dir.toFile().deleteOnExit();
return dir;
} catch (Exception e) {
@@ -193,7 +190,7 @@ public class FileUtils {
public static Path createTempFile(String suffix) {
try {
Path path = Files.createTempFile(TEMP_ROOT_DIR, JADX_TMP_PREFIX, suffix);
Path path = Files.createTempFile(tempRootDir, JADX_TMP_PREFIX, suffix);
path.toFile().deleteOnExit();
return path;
} catch (Exception e) {
@@ -8,7 +8,6 @@ import java.io.RandomAccessFile;
import java.lang.reflect.UndeclaredThrowableException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -126,14 +125,12 @@ public class ZipFile extends java.util.zip.ZipFile {
}
private static File copyFile(File file) throws IOException {
var newFile = Files.createTempFile(file.getName(), ".apk").toFile();
var newFile = FileUtils.createTempFile(file.getName()).toFile();
try (var in = new FileInputStream(file)) {
try (var out = new FileOutputStream(newFile)) {
in.transferTo(out);
}
}
return newFile;
}