ZipUtils: use FileChannel#size

RandomAccessFile#length returns 0 for block devices while
FileChannel#size returns the correct size. ZipUtils should work with
block-device zip files when Android is running as a guest OS and
APK/APEX files are passed via block devices.

Bug: 193592496
Bug: 192366904
Test: FrameworksServicesTests
Change-Id: I6472e2a9051b92a5a778b4990b8e681492985d1a
This commit is contained in:
Jooyung Han
2021-07-14 13:58:55 +09:00
parent ef140360c3
commit 1257f1505c

View File

@@ -63,7 +63,8 @@ abstract class ZipUtils {
// exactly the remaining bytes in the buffer. The search is bounded because the maximum
// size of the comment field is 65535 bytes because the field is an unsigned 16-bit number.
long fileSize = zip.length();
// TODO(b/193592496) RandomAccessFile#length
long fileSize = zip.getChannel().size();
if (fileSize < ZIP_EOCD_REC_MIN_SIZE) {
return null;
}
@@ -110,7 +111,8 @@ abstract class ZipUtils {
throw new IllegalArgumentException("maxCommentSize: " + maxCommentSize);
}
long fileSize = zip.length();
// TODO(b/193592496) RandomAccessFile#length
long fileSize = zip.getChannel().size();
if (fileSize < ZIP_EOCD_REC_MIN_SIZE) {
// No space for EoCD record in the file.
return null;