check overflow on reading field id
diff --git a/lib/rs/src/protocol/compact.rs b/lib/rs/src/protocol/compact.rs
index 319f28a..0ded14a 100644
--- a/lib/rs/src/protocol/compact.rs
+++ b/lib/rs/src/protocol/compact.rs
@@ -217,7 +217,16 @@
),
_ => {
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()?;
};