From 6b61599114c030ffa72a9999e27dc20fd7f55978 Mon Sep 17 00:00:00 2001 From: RedArms <47068819+RedArms@users.noreply.github.com> Date: Mon, 8 Dec 2025 20:00:57 +0100 Subject: [PATCH] fix(xapk): use stream copy to prevent OOM on large files (#2619) (PR #2719) --- .../src/main/java/jadx/plugins/input/xapk/XApkLoader.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/jadx-plugins/jadx-xapk-input/src/main/java/jadx/plugins/input/xapk/XApkLoader.java b/jadx-plugins/jadx-xapk-input/src/main/java/jadx/plugins/input/xapk/XApkLoader.java index f063bc5e1..965efd110 100644 --- a/jadx-plugins/jadx-xapk-input/src/main/java/jadx/plugins/input/xapk/XApkLoader.java +++ b/jadx-plugins/jadx-xapk-input/src/main/java/jadx/plugins/input/xapk/XApkLoader.java @@ -2,10 +2,12 @@ package jadx.plugins.input.xapk; import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.LinkOption; import java.nio.file.Path; +import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -85,7 +87,9 @@ public class XApkLoader { for (IZipEntry entry : content.getEntries()) { String fileName = entry.getName(); Path file = tmpDir.resolve(fileName); - Files.write(file, entry.getBytes()); + try (InputStream inputStream = entry.getInputStream()) { + Files.copy(inputStream, file, StandardCopyOption.REPLACE_EXISTING); + } if (declaredApks.contains(fileName)) { apks.add(file); } else {