agnos updater: set decompress max_length (#33320)

* agnos: decompress max_length

* flash last chunk after eof

* don't decompress more than length

* cleanup

---------

Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
old-commit-hash: ba098f509b
pull/33386/head
Andrei Radulescu 12 months ago committed by GitHub
parent 725a6fa998
commit 24c18d2c4b
  1. 25
      system/hardware/tici/agnos.py

@ -29,16 +29,23 @@ class StreamingDecompressor:
self.sha256 = hashlib.sha256() self.sha256 = hashlib.sha256()
def read(self, length: int) -> bytes: def read(self, length: int) -> bytes:
while len(self.buf) < length: while len(self.buf) < length and not self.eof:
self.req.raise_for_status() if self.decompressor.needs_input:
self.req.raise_for_status()
try: try:
compressed = next(self.it) compressed = next(self.it)
except StopIteration: except StopIteration:
self.eof = True
break
else:
compressed = b''
self.buf += self.decompressor.decompress(compressed, max_length=length)
if self.decompressor.eof:
self.eof = True self.eof = True
break break
out = self.decompressor.decompress(compressed)
self.buf += out
result = self.buf[:length] result = self.buf[:length]
self.buf = self.buf[length:] self.buf = self.buf[length:]
@ -83,8 +90,8 @@ def unsparsify(f: StreamingDecompressor) -> Generator[bytes, None, None]:
# noop wrapper with same API as unsparsify() for non sparse images # noop wrapper with same API as unsparsify() for non sparse images
def noop(f: StreamingDecompressor) -> Generator[bytes, None, None]: def noop(f: StreamingDecompressor) -> Generator[bytes, None, None]:
while not f.eof: while len(chunk := f.read(1024 * 1024)) > 0:
yield f.read(1024 * 1024) yield chunk
def get_target_slot_number() -> int: def get_target_slot_number() -> int:

Loading…
Cancel
Save