Skip to content

Commit

Permalink
agnos updater: set decompress max_length (commaai#33320)
Browse files Browse the repository at this point in the history
* agnos: decompress max_length

* flash last chunk after eof

* don't decompress more than length

* cleanup

---------

Co-authored-by: Adeeb Shihadeh <[email protected]>
  • Loading branch information
andiradulescu and adeebshihadeh authored Aug 17, 2024
1 parent 542f3d1 commit ba098f5
Showing 1 changed file with 16 additions and 9 deletions.
25 changes: 16 additions & 9 deletions system/hardware/tici/agnos.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,23 @@ def __init__(self, url: str) -> None:
self.sha256 = hashlib.sha256()

def read(self, length: int) -> bytes:
while len(self.buf) < length:
self.req.raise_for_status()
while len(self.buf) < length and not self.eof:
if self.decompressor.needs_input:
self.req.raise_for_status()

try:
compressed = next(self.it)
except StopIteration:
try:
compressed = next(self.it)
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
break
out = self.decompressor.decompress(compressed)
self.buf += out

result = self.buf[:length]
self.buf = self.buf[length:]
Expand Down Expand Up @@ -83,8 +90,8 @@ def unsparsify(f: StreamingDecompressor) -> Generator[bytes, None, None]:

# noop wrapper with same API as unsparsify() for non sparse images
def noop(f: StreamingDecompressor) -> Generator[bytes, None, None]:
while not f.eof:
yield f.read(1024 * 1024)
while len(chunk := f.read(1024 * 1024)) > 0:
yield chunk


def get_target_slot_number() -> int:
Expand Down

0 comments on commit ba098f5

Please sign in to comment.