"""C12.05: bounded length-prefixed framing over arbitrary byte chunks."""importstructMAX_PAYLOAD=4096defframe(payload:bytes)->bytes:iflen(payload)>MAX_PAYLOAD:raiseValueError("frame too large")returnstruct.pack(">I",len(payload))+payloadclassDecoder:def__init__(self):self._buffer=bytearray()self._needed:int|None=Noneself._failed=Falsedeffeed(self,chunk:bytes)->list[bytes]:ifself._failed:raiseValueError("decoder is failed")out=[]# Consume incrementally: even a large caller chunk does not cause# an unbounded internal buffering allocation.forbyteinchunk:self._buffer.append(byte)ifself._neededisNoneandlen(self._buffer)==4:self._needed=struct.unpack(">I",self._buffer)[0]self._buffer.clear()ifself._needed>MAX_PAYLOAD:self._failed=TrueraiseValueError("advertised frame too large")ifself._neededisnotNoneandlen(self._buffer)==self._needed:out.append(bytes(self._buffer))self._buffer.clear()self._needed=Nonereturnoutdeffinish(self)->None:ifself._failedorself._bufferorself._neededisnotNone:raiseValueError("truncated or invalid stream")if__name__=="__main__":d=Decoder()wire=frame(b"hello")+frame(b"")print(d.feed(wire[:3])+d.feed(wire[3:]))d.finish()