fun findZipSectionsInformation()

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()
        )
    }