diff --git a/asconfigc/pom.xml b/asconfigc/pom.xml index 0a74337ef..ccf948ec1 100644 --- a/asconfigc/pom.xml +++ b/asconfigc/pom.xml @@ -110,6 +110,11 @@ limitations under the License. json-schema-validator 1.5.6 + + org.apache.commons + commons-compress + 1.27.1 + org.slf4j slf4j-nop diff --git a/asconfigc/src/main/java/com/as3mxml/asconfigc/ASConfigC.java b/asconfigc/src/main/java/com/as3mxml/asconfigc/ASConfigC.java index 8114d8197..cc5bef915 100644 --- a/asconfigc/src/main/java/com/as3mxml/asconfigc/ASConfigC.java +++ b/asconfigc/src/main/java/com/as3mxml/asconfigc/ASConfigC.java @@ -47,8 +47,9 @@ import java.util.Set; import java.util.regex.Pattern; import java.util.stream.Collectors; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; + +import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; +import org.apache.commons.compress.archivers.zip.ZipFile; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; @@ -1260,10 +1261,10 @@ private void unpackANE(File aneFile) throws ASConfigCException { } try { - ZipFile zipFile = new ZipFile(aneFile); - Enumeration zipEntries = zipFile.entries(); + ZipFile zipFile = ZipFile.builder().setFile(aneFile).get(); + Enumeration zipEntries = zipFile.getEntries(); while (zipEntries.hasMoreElements()) { - ZipEntry zipEntry = (ZipEntry) zipEntries.nextElement(); + ZipArchiveEntry zipEntry = (ZipArchiveEntry) zipEntries.nextElement(); if (zipEntry.isDirectory()) { continue; } @@ -1272,6 +1273,18 @@ private void unpackANE(File aneFile) throws ASConfigCException { File destParent = new File(destFile.getParent()); destParent.mkdirs(); + if (zipEntry.isUnixSymlink()) { + Path link = destFile.toPath(); + Path target = Paths.get(zipFile.getUnixSymlink(zipEntry)); + try { + Files.createSymbolicLink(link, target); + continue; + } catch (Exception e) { + System.out.println("Failed to create symbolic link: " + currentAneDirectory.toPath().relativize(link) + + " -> " + target + ", will write as regular file instead." ); + } + } + BufferedInputStream inStream = new BufferedInputStream(zipFile.getInputStream(zipEntry)); FileOutputStream fileOutStream = new FileOutputStream(destFile); byte buffer[] = new byte[2048]; diff --git a/distribution/src/assembly/bin.xml b/distribution/src/assembly/bin.xml index 2b223fc81..3b5419a50 100644 --- a/distribution/src/assembly/bin.xml +++ b/distribution/src/assembly/bin.xml @@ -60,6 +60,8 @@ asconfigc*.jar commons-cli*.jar + commons-compress-*.jar + commons-io-*.jar commons-lang*.jar