From b5f36dafdc51fa4ff306c324546feb544bb6b4df Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 13 Dec 2018 23:29:48 +0800 Subject: [PATCH] Exclude solid archives --- app/build.gradle | 2 +- .../hippo/ehviewer/gallery/archive/RarArchive.java | 3 +++ .../ehviewer/gallery/archive/SevenZArchive.java | 14 +++++++++++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 38d016fbf..308f4a3a7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -71,7 +71,7 @@ dependencies { implementation 'com.github.seven332:android-resource:0.1.0' implementation 'com.github.seven332:animator:0.1.0' implementation 'com.github.seven332:beerbelly:0.1.4' - implementation 'com.github.seven332.commons-compress:android-lite:e4218388f6' + implementation 'com.github.seven332.commons-compress:android-lite:464e96d3b4' implementation 'com.github.seven332:conaco:0.1.5-eh' implementation 'com.github.seven332:drawerlayout:0.2.1' implementation 'com.github.seven332:easyrecyclerview:0.1.1' diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/archive/RarArchive.java b/app/src/main/java/com/hippo/ehviewer/gallery/archive/RarArchive.java index f1df4f9b7..f7ada25b1 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/archive/RarArchive.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/archive/RarArchive.java @@ -58,6 +58,9 @@ public class RarArchive extends Archive { com.github.junrar.Archive archive; try { archive = new com.github.junrar.Archive(volumeManager); + if (archive.getMainHeader().isSolid()) { + throw new IOException("Solid archive is not supported"); + } } catch (RarException e) { throw new IOException("Invalid rar archive", e); } diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/archive/SevenZArchive.java b/app/src/main/java/com/hippo/ehviewer/gallery/archive/SevenZArchive.java index d4b4dc6ee..161a9085b 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/archive/SevenZArchive.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/archive/SevenZArchive.java @@ -38,7 +38,9 @@ public class SevenZArchive extends Archive { List result = new ArrayList<>(); for (org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry archive : file.getEntries()) { - if (isSupportedFilename(archive.getName().toLowerCase())) { + if (archive.getSize() != 0 + && !archive.isDirectory() + && isSupportedFilename(archive.getName().toLowerCase())) { result.add(new SevenZArchiveEntry(file, archive)); } } @@ -54,6 +56,16 @@ public class SevenZArchive extends Archive { public static Archive create(UniRandomAccessFile file) throws IOException { Store store = new UniRandomAccessFileStore(file); SevenZFile sevenZFile = new SevenZFile(store); + + // Check whether the archive is solid + for (org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry entry : sevenZFile.getEntries()) { + if (entry.getSize() != 0 + && !entry.isDirectory() + && !entry.isFirstInFolder()) { + throw new IOException("Solid archive is not supported"); + } + } + return new SevenZArchive(sevenZFile); }