mirror of
https://github.com/revanced/revanced-cli.git
synced 2024-12-04 01:12:54 +01:00
fix: ZipAligner
not correctly calculating the file offset
This commit is contained in:
parent
0d7581ad75
commit
2975a47d0f
@ -2,6 +2,7 @@ package app.revanced.utils.signing.align
|
||||
|
||||
import app.revanced.utils.signing.align.stream.MultiOutputStream
|
||||
import app.revanced.utils.signing.align.stream.PeekingFakeStream
|
||||
import java.io.BufferedOutputStream
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
import java.util.zip.ZipEntry
|
||||
@ -18,7 +19,7 @@ internal object ZipAligner {
|
||||
val peekingFakeStream = PeekingFakeStream()
|
||||
val fakeOutputStream = ZipOutputStream(peekingFakeStream)
|
||||
// real
|
||||
val zipOutputStream = ZipOutputStream(output.outputStream())
|
||||
val zipOutputStream = ZipOutputStream(BufferedOutputStream(output.outputStream()))
|
||||
|
||||
val multiOutputStream = MultiOutputStream(
|
||||
listOf(
|
||||
@ -40,8 +41,6 @@ internal object ZipAligner {
|
||||
val newOffset = fileOffset + bias
|
||||
padding = ((alignment - (newOffset % alignment)) % alignment).toInt()
|
||||
|
||||
// fake, used to add the padding, because we add it to real as well in the extra field
|
||||
peekingFakeStream.seek(padding.toLong())
|
||||
// real
|
||||
entry.extra = if (entry.extra == null) ByteArray(padding)
|
||||
else Arrays.copyOf(entry.extra, entry.extra.size + padding)
|
@ -5,21 +5,16 @@ import java.io.OutputStream
|
||||
internal class MultiOutputStream(
|
||||
private val streams: Iterable<OutputStream>,
|
||||
) : OutputStream() {
|
||||
override fun write(b: ByteArray, off: Int, len: Int) {
|
||||
streams.forEach {
|
||||
it.write(b, off, len)
|
||||
}
|
||||
override fun write(b: ByteArray, off: Int, len: Int) = streams.forEach {
|
||||
it.write(b, off, len)
|
||||
}
|
||||
|
||||
override fun write(b: ByteArray) {
|
||||
streams.forEach {
|
||||
it.write(b)
|
||||
}
|
||||
override fun write(b: ByteArray) = streams.forEach {
|
||||
it.write(b)
|
||||
}
|
||||
|
||||
override fun write(b: Int) {
|
||||
streams.forEach {
|
||||
it.write(b)
|
||||
}
|
||||
override fun write(b: Int) = streams.forEach {
|
||||
it.write(b)
|
||||
}
|
||||
|
||||
}
|
@ -2,16 +2,10 @@ package app.revanced.utils.signing.align.stream
|
||||
|
||||
import java.io.OutputStream
|
||||
|
||||
internal class PeekingFakeStream : OutputStream() {
|
||||
internal class PeekingFakeStream : OutputStream() {
|
||||
private var numberOfBytes: Long = 0
|
||||
|
||||
fun seek(n: Long) {
|
||||
numberOfBytes += n
|
||||
}
|
||||
|
||||
fun peek(): Long {
|
||||
return numberOfBytes
|
||||
}
|
||||
fun peek() = numberOfBytes
|
||||
|
||||
override fun write(b: Int) {
|
||||
numberOfBytes++
|
||||
@ -22,6 +16,6 @@ internal class PeekingFakeStream : OutputStream() {
|
||||
}
|
||||
|
||||
override fun write(b: ByteArray, offset: Int, len: Int) {
|
||||
numberOfBytes += len - offset
|
||||
numberOfBytes += len
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user