Skip to content
This repository has been archived by the owner on Mar 14, 2024. It is now read-only.

Commit

Permalink
fix: ZipAligner not correctly calculating the file offset
Browse files Browse the repository at this point in the history
  • Loading branch information
oSumAtrIX committed Jun 11, 2022
1 parent 0d7581a commit 2975a47
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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(
Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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++
Expand All @@ -22,6 +16,6 @@ internal class PeekingFakeStream : OutputStream() {
}

override fun write(b: ByteArray, offset: Int, len: Int) {
numberOfBytes += len - offset
numberOfBytes += len
}
}

0 comments on commit 2975a47

Please sign in to comment.