fix(zip): allow to load zip with duplicate names in entries
This commit is contained in:
@@ -2,14 +2,17 @@ package jadx.zip;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class ZipContent implements Closeable {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ZipContent.class);
|
||||
|
||||
private final IZipParser zipParser;
|
||||
private final List<IZipEntry> entries;
|
||||
private final Map<String, IZipEntry> entriesMap;
|
||||
@@ -17,7 +20,19 @@ public class ZipContent implements Closeable {
|
||||
public ZipContent(IZipParser zipParser, List<IZipEntry> entries) {
|
||||
this.zipParser = zipParser;
|
||||
this.entries = entries;
|
||||
this.entriesMap = entries.stream().collect(Collectors.toMap(IZipEntry::getName, Function.identity()));
|
||||
this.entriesMap = buildNameMap(zipParser, entries);
|
||||
}
|
||||
|
||||
private static Map<String, IZipEntry> buildNameMap(IZipParser zipParser, List<IZipEntry> entries) {
|
||||
Map<String, IZipEntry> map = new HashMap<>(entries.size());
|
||||
for (IZipEntry entry : entries) {
|
||||
String name = entry.getName();
|
||||
IZipEntry prevEntry = map.put(name, entry);
|
||||
if (prevEntry != null) {
|
||||
LOG.warn("Found duplicate entry: {} in {}", name, zipParser);
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
public List<IZipEntry> getEntries() {
|
||||
|
||||
Reference in New Issue
Block a user