diff --git a/lib/rs/src/protocol/compact.rs b/lib/rs/src/protocol/compact.rs index c0c43722ed8..1f597a4c72a 100644 --- a/lib/rs/src/protocol/compact.rs +++ b/lib/rs/src/protocol/compact.rs @@ -186,7 +186,16 @@ where ), _ => { if field_delta != 0 { - self.last_read_field_id += field_delta as i16; + self.last_read_field_id = self + .last_read_field_id + .checked_add(field_delta as i16) + .ok_or(crate::Error::Protocol(crate::ProtocolError { + kind: crate::ProtocolErrorKind::InvalidData, + message: format!( + "invalid field delta {} for last field id {}", + field_delta, self.last_read_field_id + ), + }))?; } else { self.last_read_field_id = self.read_i16()?; };