in lib/src/main/kotlin/org/jetbrains/zip/signer/zip/ZipUtils.kt [22:40]
fun findZipSectionsInformation(zip: DataSource): ZipSectionsInformation {
val (eocdOffset, eocd) = findEocdInBuffer(zip)
?: throw ZipException("ZIP End of Central Directory record not found")
val centralDirectoryEndOffset = eocd.centralDirectoryOffset.toLong() + eocd.centralDirectorySize.toLong()
if (eocd.centralDirectoryOffset.toLong() > eocdOffset) {
throw ZipException("ZIP Central Directory start offset out of range")
}
if (centralDirectoryEndOffset > eocdOffset) {
throw ZipException("ZIP Central Directory overlaps with End of Central Directory")
}
return ZipSectionsInformation(
centralDirectoryOffset = eocd.centralDirectoryOffset.toLong(),
centralDirectorySizeBytes = eocd.centralDirectorySize.toLong(),
endOfCentralDirectoryOffset = eocdOffset,
endOfCentralDirectorySizeBytes = (zip.size() - eocdOffset).toInt()
)
}