Skip to content

Commit 0ea7f81

Browse files
committed
asconfigc: handle symbolic links when unpacking ANEs
1 parent d2879cf commit 0ea7f81

3 files changed

Lines changed: 25 additions & 5 deletions

File tree

asconfigc/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,11 @@ limitations under the License.
110110
<artifactId>json-schema-validator</artifactId>
111111
<version>1.5.6</version>
112112
</dependency>
113+
<dependency>
114+
<groupId>org.apache.commons</groupId>
115+
<artifactId>commons-compress</artifactId>
116+
<version>1.27.1</version>
117+
</dependency>
113118
<dependency>
114119
<groupId>org.slf4j</groupId>
115120
<artifactId>slf4j-nop</artifactId>

asconfigc/src/main/java/com/as3mxml/asconfigc/ASConfigC.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@
4747
import java.util.Set;
4848
import java.util.regex.Pattern;
4949
import java.util.stream.Collectors;
50-
import java.util.zip.ZipEntry;
51-
import java.util.zip.ZipFile;
50+
51+
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
52+
import org.apache.commons.compress.archivers.zip.ZipFile;
5253

5354
import org.apache.commons.cli.CommandLine;
5455
import org.apache.commons.cli.CommandLineParser;
@@ -1260,10 +1261,10 @@ private void unpackANE(File aneFile) throws ASConfigCException {
12601261
}
12611262

12621263
try {
1263-
ZipFile zipFile = new ZipFile(aneFile);
1264-
Enumeration<?> zipEntries = zipFile.entries();
1264+
ZipFile zipFile = ZipFile.builder().setFile(aneFile).get();
1265+
Enumeration<?> zipEntries = zipFile.getEntries();
12651266
while (zipEntries.hasMoreElements()) {
1266-
ZipEntry zipEntry = (ZipEntry) zipEntries.nextElement();
1267+
ZipArchiveEntry zipEntry = (ZipArchiveEntry) zipEntries.nextElement();
12671268
if (zipEntry.isDirectory()) {
12681269
continue;
12691270
}
@@ -1272,6 +1273,18 @@ private void unpackANE(File aneFile) throws ASConfigCException {
12721273
File destParent = new File(destFile.getParent());
12731274
destParent.mkdirs();
12741275

1276+
if (zipEntry.isUnixSymlink()) {
1277+
Path link = destFile.toPath();
1278+
Path target = Paths.get(zipFile.getUnixSymlink(zipEntry));
1279+
try {
1280+
Files.createSymbolicLink(link, target);
1281+
continue;
1282+
} catch (Exception e) {
1283+
System.out.println("Failed to create symbolic link: " + currentAneDirectory.toPath().relativize(link)
1284+
+ " -> " + target + ", will write as regular file instead." );
1285+
}
1286+
}
1287+
12751288
BufferedInputStream inStream = new BufferedInputStream(zipFile.getInputStream(zipEntry));
12761289
FileOutputStream fileOutStream = new FileOutputStream(destFile);
12771290
byte buffer[] = new byte[2048];

distribution/src/assembly/bin.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@
6060
<includes>
6161
<include>asconfigc*.jar</include>
6262
<include>commons-cli*.jar</include>
63+
<include>commons-compress-*.jar</include>
64+
<include>commons-io-*.jar</include>
6365
<include>commons-lang*.jar</include>
6466
</includes>
6567
</fileSet>

0 commit comments

Comments
 (0)