Parse Payload v2 header.
The update payload v2 contains an extra field in the header with the
size of the metadata signatures and the metadata signatures stored
right after the metadata. This patch parses the new payload format.
BUG=b:22024447
TEST=cros payload show payload-v2.bin; served a payload v2 with devserver.py
Change-Id: I8ce85af1df505f82f62a9d1cd57910cee6921f84
Reviewed-on: https://chromium-review.googlesource.com/306090
Commit-Ready: Alex Deymo <deymo@chromium.org>
Tested-by: Alex Deymo <deymo@chromium.org>
Reviewed-by: Gilad Arnold <garnold@chromium.org>
diff --git a/autoupdate.py b/autoupdate.py
index e20d4c2..a2a293f 100644
--- a/autoupdate.py
+++ b/autoupdate.py
@@ -566,12 +566,15 @@
Returns:
The size of the payload metadata, as reported in the payload header.
"""
- # Handle corner-case where unit tests pass in empty payload files.
- if os.path.getsize(payload_filename) < 20:
+ try:
+ with open(payload_filename) as payload_file:
+ payload = update_payload.Payload(payload_file)
+ payload.Init()
+ return payload.metadata_size
+ except (IOError, update_payload.PayloadError):
+ # For unit tests we may not have real files, so it's ok to ignore these
+ # errors.
return 0
- stream = open(payload_filename, 'rb')
- stream.seek(16)
- return struct.unpack('>I', stream.read(4))[0] + 20
def GetLocalPayloadAttrs(self, payload_dir):
"""Returns hashes, size and delta flag of a local update payload.