THRIFT-5927: fix i16 overflow in compact protocol read_field_begin

Replace unchecked += with checked_add to prevent overflow.
In overflow-checked builds this caused a panic; in release builds
the accumulator wrapped silently, discarding all subsequent fields.
diff --git a/lib/rs/src/protocol/compact.rs b/lib/rs/src/protocol/compact.rs
index 319f28a..0e61360 100644
--- a/lib/rs/src/protocol/compact.rs
+++ b/lib/rs/src/protocol/compact.rs
@@ -217,7 +217,15 @@
             ),
             _ => {
                 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_else(|| {
+                            crate::Error::Protocol(ProtocolError::new(
+                                ProtocolErrorKind::InvalidData,
+                                "field id overflow",
+                            ))
+                        })?;
                 } else {
                     self.last_read_field_id = self.read_i16()?;
                 };