diff --git a/contrib/pyln-proto/pyln/proto/message/message.py b/contrib/pyln-proto/pyln/proto/message/message.py index 2f498e7ef5ef..1b8d8f37f66f 100644 --- a/contrib/pyln-proto/pyln/proto/message/message.py +++ b/contrib/pyln-proto/pyln/proto/message/message.py @@ -591,6 +591,8 @@ def read(namespace: MessageNamespace, io_in: BufferedIOBase) -> Optional['Messag fields[f.name] = f.fieldtype.read(io_in, fields) if fields[f.name] is None: # optional fields are OK to be missing at end! + if f.option is not None: + break raise ValueError('{}: truncated at field {}' .format(mtype, f.name)) @@ -641,6 +643,9 @@ def write(self, io_out: BufferedIOBase) -> None: if f.name in self.fields: val = self.fields[f.name] else: + # If this isn't present, and it's marked optional, don't write. + if f.option is not None: + return val = None f.fieldtype.write(io_out, val, self.fields)