Skip to content

Commit 2975a47

Browse files
committed
fix: ZipAligner not correctly calculating the file offset
1 parent 0d7581a commit 2975a47

File tree

3 files changed

+12
-24
lines changed

3 files changed

+12
-24
lines changed

src/main/kotlin/app/revanced/utils/signing/align/Aligner.kt renamed to src/main/kotlin/app/revanced/utils/signing/align/ZipAligner.kt

+2-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package app.revanced.utils.signing.align
22

33
import app.revanced.utils.signing.align.stream.MultiOutputStream
44
import app.revanced.utils.signing.align.stream.PeekingFakeStream
5+
import java.io.BufferedOutputStream
56
import java.io.File
67
import java.util.*
78
import java.util.zip.ZipEntry
@@ -18,7 +19,7 @@ internal object ZipAligner {
1819
val peekingFakeStream = PeekingFakeStream()
1920
val fakeOutputStream = ZipOutputStream(peekingFakeStream)
2021
// real
21-
val zipOutputStream = ZipOutputStream(output.outputStream())
22+
val zipOutputStream = ZipOutputStream(BufferedOutputStream(output.outputStream()))
2223

2324
val multiOutputStream = MultiOutputStream(
2425
listOf(
@@ -40,8 +41,6 @@ internal object ZipAligner {
4041
val newOffset = fileOffset + bias
4142
padding = ((alignment - (newOffset % alignment)) % alignment).toInt()
4243

43-
// fake, used to add the padding, because we add it to real as well in the extra field
44-
peekingFakeStream.seek(padding.toLong())
4544
// real
4645
entry.extra = if (entry.extra == null) ByteArray(padding)
4746
else Arrays.copyOf(entry.extra, entry.extra.size + padding)

src/main/kotlin/app/revanced/utils/signing/align/stream/MultiOutputStream.kt

+7-12
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,16 @@ import java.io.OutputStream
55
internal class MultiOutputStream(
66
private val streams: Iterable<OutputStream>,
77
) : OutputStream() {
8-
override fun write(b: ByteArray, off: Int, len: Int) {
9-
streams.forEach {
10-
it.write(b, off, len)
11-
}
8+
override fun write(b: ByteArray, off: Int, len: Int) = streams.forEach {
9+
it.write(b, off, len)
1210
}
1311

14-
override fun write(b: ByteArray) {
15-
streams.forEach {
16-
it.write(b)
17-
}
12+
override fun write(b: ByteArray) = streams.forEach {
13+
it.write(b)
1814
}
1915

20-
override fun write(b: Int) {
21-
streams.forEach {
22-
it.write(b)
23-
}
16+
override fun write(b: Int) = streams.forEach {
17+
it.write(b)
2418
}
19+
2520
}

src/main/kotlin/app/revanced/utils/signing/align/stream/PeekingFakeStream.kt

+3-9
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,10 @@ package app.revanced.utils.signing.align.stream
22

33
import java.io.OutputStream
44

5-
internal class PeekingFakeStream : OutputStream() {
5+
internal class PeekingFakeStream : OutputStream() {
66
private var numberOfBytes: Long = 0
77

8-
fun seek(n: Long) {
9-
numberOfBytes += n
10-
}
11-
12-
fun peek(): Long {
13-
return numberOfBytes
14-
}
8+
fun peek() = numberOfBytes
159

1610
override fun write(b: Int) {
1711
numberOfBytes++
@@ -22,6 +16,6 @@ internal class PeekingFakeStream : OutputStream() {
2216
}
2317

2418
override fun write(b: ByteArray, offset: Int, len: Int) {
25-
numberOfBytes += len - offset
19+
numberOfBytes += len
2620
}
2721
}

0 commit comments

Comments
 (0)