Merge "Fix a bug where small manifest isn't read" am: 62582263a2 am: 6750cd8b02 am: d5764b5753
Original change: https://android-review.googlesource.com/c/platform/development/+/1792911 Change-Id: Ibe0c28010528707cda2ad8a27d3e25999b4f917e
This commit is contained in:
@@ -72,18 +72,20 @@ class OTAPayloadBlobWriter extends zip.Writer {
|
|||||||
// Once the prefixLength is non-zero, the address of manifest and signature
|
// Once the prefixLength is non-zero, the address of manifest and signature
|
||||||
// become known and can be read in. Otherwise the header needs to be read
|
// become known and can be read in. Otherwise the header needs to be read
|
||||||
// in first to determine the prefixLength.
|
// in first to determine the prefixLength.
|
||||||
if (this.prefixLength > 0) {
|
if (this.offset >= _PAYLOAD_HEADER_SIZE) {
|
||||||
if (this.offset >= this.prefixLength) {
|
|
||||||
await this.payload.readManifest(this.blob)
|
|
||||||
await this.payload.readSignature(this.blob)
|
|
||||||
}
|
|
||||||
} else if (this.offset >= _PAYLOAD_HEADER_SIZE) {
|
|
||||||
await this.payload.readHeader(this.blob)
|
await this.payload.readHeader(this.blob)
|
||||||
this.prefixLength =
|
this.prefixLength =
|
||||||
_PAYLOAD_HEADER_SIZE
|
_PAYLOAD_HEADER_SIZE
|
||||||
+ this.payload.manifest_len
|
+ this.payload.manifest_len
|
||||||
+ this.payload.metadata_signature_len
|
+ this.payload.metadata_signature_len
|
||||||
return
|
console.log(`Computed metadata length: ${this.prefixLength}`);
|
||||||
|
}
|
||||||
|
if (this.prefixLength > 0) {
|
||||||
|
console.log(`${this.offset}/${this.prefixLength}`);
|
||||||
|
if (this.offset >= this.prefixLength) {
|
||||||
|
await this.payload.readManifest(this.blob)
|
||||||
|
await this.payload.readSignature(this.blob)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// The prefix has everything we need (header, manifest, signature). Once
|
// The prefix has everything we need (header, manifest, signature). Once
|
||||||
// the offset is beyond the prefix, no need to move on.
|
// the offset is beyond the prefix, no need to move on.
|
||||||
@@ -159,12 +161,12 @@ export class Payload {
|
|||||||
this.buffer.slice(this.cursor, this.cursor + size))
|
this.buffer.slice(this.cursor, this.cursor + size))
|
||||||
if (typeof view.getBigUint64 !== "function") {
|
if (typeof view.getBigUint64 !== "function") {
|
||||||
view.getBigUint64 =
|
view.getBigUint64 =
|
||||||
function(offset) {
|
function (offset) {
|
||||||
const a = BigInt(view.getUint32(offset))
|
const a = BigInt(view.getUint32(offset))
|
||||||
const b = BigInt(view.getUint32(offset + 4))
|
const b = BigInt(view.getUint32(offset + 4))
|
||||||
const bigNumber = a * 4294967296n + b
|
const bigNumber = a * 4294967296n + b
|
||||||
return bigNumber
|
return bigNumber
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.cursor += size
|
this.cursor += size
|
||||||
switch (size) {
|
switch (size) {
|
||||||
|
|||||||
Reference in New Issue
Block a user