diff --git a/bbootimg/src/main/kotlin/bootimg/v3/BootHeaderV3.kt b/bbootimg/src/main/kotlin/bootimg/v3/BootHeaderV3.kt index a8929e5..0bbc3a2 100644 --- a/bbootimg/src/main/kotlin/bootimg/v3/BootHeaderV3.kt +++ b/bbootimg/src/main/kotlin/bootimg/v3/BootHeaderV3.kt @@ -72,6 +72,22 @@ class BootHeaderV3( ) } + fun feature67(): BootHeaderV3 { + val newHeaderSize = when (headerVersion) { + 3 -> BOOT_IMAGE_HEADER_V3_SIZE + else -> BOOT_IMAGE_HEADER_V4_SIZE + } + if (newHeaderSize != headerSize) { + log.warn("wrong headerSize, fixed.($headerSize -> $newHeaderSize)") + headerSize = newHeaderSize + } + if (signatureSize != 0 && headerVersion == 3) { + log.warn("trim bootSignature for headerVersion=3") + signatureSize = 0 + } + return this + } + override fun toString(): String { return "BootImgHeaderV3(kernelSize=$kernelSize, ramdiskSize=$ramdiskSize, osVersion=$osVersion, osPatchLevel=$osPatchLevel, headerSize=$headerSize, headerVersion=$headerVersion, cmdline='$cmdline')" } diff --git a/bbootimg/src/main/kotlin/bootimg/v3/BootV3.kt b/bbootimg/src/main/kotlin/bootimg/v3/BootV3.kt index 59e6096..c6aa3d4 100644 --- a/bbootimg/src/main/kotlin/bootimg/v3/BootV3.kt +++ b/bbootimg/src/main/kotlin/bootimg/v3/BootV3.kt @@ -187,7 +187,7 @@ data class BootV3( headerSize = info.headerSize, cmdline = info.cmdline, signatureSize = info.signatureSize - ) + ).feature67() } fun extractImages(): BootV3 { diff --git a/bbootimg/src/main/kotlin/bootimg/v3/VendorBoot.kt b/bbootimg/src/main/kotlin/bootimg/v3/VendorBoot.kt index 5094c86..aae0749 100644 --- a/bbootimg/src/main/kotlin/bootimg/v3/VendorBoot.kt +++ b/bbootimg/src/main/kotlin/bootimg/v3/VendorBoot.kt @@ -307,7 +307,7 @@ data class VendorBoot( vrtEntryNum = ramdisk_table.ramdidks.size, vrtEntrySize = ramdisk_table.eachEntrySize, bootconfigSize = File(bootconfig.file).length().toInt() - ) + ).feature67() } fun extractImages(): VendorBoot { diff --git a/bbootimg/src/main/kotlin/bootimg/v3/VendorBootHeader.kt b/bbootimg/src/main/kotlin/bootimg/v3/VendorBootHeader.kt index 09dc619..2c4dc77 100644 --- a/bbootimg/src/main/kotlin/bootimg/v3/VendorBootHeader.kt +++ b/bbootimg/src/main/kotlin/bootimg/v3/VendorBootHeader.kt @@ -70,6 +70,26 @@ class VendorBootHeader( } } + // https://github.com/cfig/Android_boot_image_editor/issues/67 + // support vendor_boot headerVersion downgrade from 4 to 3 during re-pack + fun feature67(): VendorBootHeader { + val newHeaderSize = when (this.headerVersion) { + 3 -> VendorBootHeader.VENDOR_BOOT_IMAGE_HEADER_V3_SIZE + else -> VendorBootHeader.VENDOR_BOOT_IMAGE_HEADER_V4_SIZE + } + if (newHeaderSize != headerSize) { + log.warn("wrong headerSize, fixed.($headerSize -> $newHeaderSize)") + headerSize = newHeaderSize + } + if (vrtSize != 0 && headerVersion == 3) { + log.warn("trim vrt for headerVersion=3") + vrtSize = 0 + vrtEntryNum = 0 + vrtEntrySize = 0 + } + return this + } + fun encode(): ByteArray { return Struct3(FORMAT_STRING).pack( magic,