Skip to content

Commit 7e832a4

Browse files
enhance validations when deserializing message
1 parent 3ef6a55 commit 7e832a4

1 file changed

Lines changed: 10 additions & 1 deletion

File tree

sds/protobuf.nim

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,17 @@ proc serializeMessage*(msg: SdsMessage): Result[seq[byte], ReliabilityError] =
121121
return err(ReliabilityError.reSerializationError)
122122

123123
proc deserializeMessage*(data: seq[byte]): Result[SdsMessage, ReliabilityError] =
124+
## proto3 has no required fields, so presence is validated by hand. Only the
125+
## identifiers are mandatory: `content`, `bloomFilter` and a zero
126+
## `lamportTimestamp` may legitimately be empty (e.g. periodic sync messages).
124127
try:
125-
return ok(Protobuf.decode(data, SdsMessagePB).fromPB)
128+
let pb = Protobuf.decode(data, SdsMessagePB)
129+
if pb.messageId.len == 0 or pb.channelId.len == 0:
130+
return err(ReliabilityError.reDeserializationError)
131+
for e in pb.causalHistory & pb.repairRequest:
132+
if e.messageId.len == 0:
133+
return err(ReliabilityError.reDeserializationError)
134+
return ok(pb.fromPB)
126135
except CatchableError:
127136
return err(ReliabilityError.reDeserializationError)
128137

0 commit comments

Comments
 (0)