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()?;
                 };