Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 31 additions & 1 deletion rust/flatbuffers/src/verifier.rs
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ impl<'opts, 'buf> Verifier<'opts, 'buf> {
pub fn reset(&mut self) {
self.depth = 0;
self.num_tables = 0;
self.num_tables = 0;
self.apparent_size = 0;
}
/// Checks `pos` is aligned to T's alignment. This does not mean `buffer[pos]` is aligned w.r.t
/// memory since `buffer: &[u8]` has alignment 1.
Expand Down Expand Up @@ -627,3 +627,33 @@ impl_verifiable_for!(f32);
impl_verifiable_for!(u64);
impl_verifiable_for!(i64);
impl_verifiable_for!(f64);

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn reset_clears_apparent_size() {
let opts = VerifierOptions {
max_apparent_size: 100,
..Default::default()
};
let buffer = [0u8; 64];
let mut verifier = Verifier::new(&opts, &buffer);

verifier
.range_in_buffer(0, 60)
.expect("60 bytes is under the 100 byte budget");

// reset() restores the verifier to its state after new(), so the same
// range has to fit again. Without clearing apparent_size the running
// total stays at 60, and the second range pushes it to 120.
verifier.reset();

assert_eq!(
verifier.range_in_buffer(0, 60),
Ok(()),
"reset() must clear apparent_size, not just depth and num_tables"
);
}
}