Fix overflow in RenderLayers::iter_layers
(#14264)
# Objective - Fixes overflow when calling `RenderLayers::iter_layers` on layers of the form `k * 64 - 1` - Causes a panic in debug mode, and an infinite iterator in release mode ## Solution - Use `u64::checked_shr` instead of `>>=` ## Testing - Added a test case for this: `render_layer_iter_no_overflow`
This commit is contained in:
parent
524fb01457
commit
728c5b98d4
@ -162,7 +162,7 @@ impl RenderLayers {
|
||||
return None;
|
||||
}
|
||||
let next = buffer.trailing_zeros() + 1;
|
||||
buffer >>= next;
|
||||
buffer = buffer.checked_shr(next).unwrap_or(0);
|
||||
layer += next as usize;
|
||||
Some(layer - 1)
|
||||
})
|
||||
@ -359,4 +359,10 @@ mod rendering_mask_tests {
|
||||
let layers = layers.without(77);
|
||||
assert!(layers.0.len() == 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn render_layer_iter_no_overflow() {
|
||||
let layers = RenderLayers::from_layers(&[63]);
|
||||
layers.iter().count();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user