Hai Zhang created COMPRESS-455:
----------------------------------

             Summary: Cannot open certain APK file (Unexpected record signature)
                 Key: COMPRESS-455
                 URL: https://issues.apache.org/jira/browse/COMPRESS-455
             Project: Commons Compress
          Issue Type: Bug
          Components: Archivers
    Affects Versions: 1.17
         Environment: Android 8.1.0
            Reporter: Hai Zhang


I'm developing a file manager for Android and noticed that 
ZipArchiveInputStream throws an exception for certain APK files (but not all) I 
have at hand:

 
{noformat}
06-12 23:01:03.043 26960-4050/me.zhanghai.android.materialfilemanager 
W/System.err: java.util.zip.ZipException: Unexpected record signature: 0X621
06-12 23:01:03.044 26960-4050/me.zhanghai.android.materialfilemanager 
W/System.err: at 
org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextZipEntry(ZipArchiveInputStream.java:258)
 at 
org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextEntry(ZipArchiveInputStream.java:406)
 at 
me.zhanghai.android.materialfilemanager.filesystem.Archive.readEntries(Archive.java:79)
 at 
me.zhanghai.android.materialfilemanager.filesystem.Archive.read(Archive.java:36)
 at 
me.zhanghai.android.materialfilemanager.filesystem.ArchiveFile.loadFileList(ArchiveFile.java:112)
 at 
me.zhanghai.android.materialfilemanager.filelist.FileLiveData$1.doInBackground(FileLiveData.java:32)
 at 
me.zhanghai.android.materialfilemanager.filelist.FileLiveData$1.doInBackground(FileLiveData.java:28)
 at android.os.AsyncTask$2.call(AsyncTask.java:333)
 at java.util.concurrent.FutureTask.run(FutureTask.java:266)
 at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
 at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
 at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
 at java.lang.Thread.run(Thread.java:764){noformat}
 

However, these APKs installs fine, and can be viewed by the system Files app 
(by changing extension to zip) and some other opensource file managers built 
upon java.util.zip.

Some links to APKs I found with this problem:

1. 
[https://github.com/paphonb/PixelLauncherModV5/releases/download/5.3_23/Pixel.2.Launcher.modded.5.3.build.23.apk]
 

2. [https://github.com/Yink/Amadeus/releases/download/0.9.6-alpha.5/amadeus.apk]

My code for reading the APK archive entries:

 

 
{code:java}
private static void readEntries(InputStream inputStream, List<ArchiveEntry> 
entries)
        throws ArchiveException, IOException {
    try (ArchiveInputStream archiveInputStream = 
sArchiveStreamFactory.createArchiveInputStream(
new BufferedInputStream(inputStream))) {
        while (true) {
            ArchiveEntry entry = archiveInputStream.getNextEntry();
            if (entry == null) {
                break;
            }
            entries.add(entry);
        }
    }
}
{code}
Also note that if I catch the exception while keeping the list of already-read 
entries, it seems that (almost) all entries have been read.

I wonder how this can be fixed, or if this is because those files have some 
kind of weird format, how can I possibly work around this?

 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to