Skip to content

Commit 53b76b2

Browse files
refactor: let wgpu-core impl. OOB as valid. err.
This does not, in fact, remove any bounds checks in practice. It is now a validation error, implemented by the previous commit.
1 parent 5c463ac commit 53b76b2

File tree

1 file changed

+1
-54
lines changed

1 file changed

+1
-54
lines changed

wgpu/src/api/buffer.rs

Lines changed: 1 addition & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,6 @@ impl Buffer {
242242
/// end of the buffer.
243243
pub fn slice<S: RangeBounds<BufferAddress>>(&self, bounds: S) -> BufferSlice<'_> {
244244
let (offset, size) = range_to_offset_size(bounds);
245-
check_buffer_bounds(self.size, offset, size);
246245
BufferSlice {
247246
buffer: self,
248247
offset,
@@ -674,31 +673,6 @@ impl Drop for Buffer {
674673
}
675674
}
676675

677-
fn check_buffer_bounds(
678-
buffer_size: BufferAddress,
679-
offset: BufferAddress,
680-
size: Option<BufferSize>,
681-
) {
682-
// A slice of length 0 is invalid, so the offset must not be equal to or greater than the buffer size.
683-
if offset >= buffer_size {
684-
panic!(
685-
"slice offset {} is out of range for buffer of size {}",
686-
offset, buffer_size
687-
);
688-
}
689-
690-
if let Some(size) = size {
691-
// Detect integer overflow.
692-
let end = offset.checked_add(size.get());
693-
if end.map_or(true, |end| end > buffer_size) {
694-
panic!(
695-
"slice offset {} size {} is out of range for buffer of size {}",
696-
offset, size, buffer_size
697-
);
698-
}
699-
}
700-
}
701-
702676
fn range_to_offset_size<S: RangeBounds<BufferAddress>>(
703677
bounds: S,
704678
) -> (BufferAddress, Option<BufferSize>) {
@@ -719,7 +693,7 @@ fn range_to_offset_size<S: RangeBounds<BufferAddress>>(
719693

720694
#[cfg(test)]
721695
mod tests {
722-
use super::{check_buffer_bounds, range_to_offset_size, BufferSize};
696+
use super::{range_to_offset_size, BufferSize};
723697

724698
#[test]
725699
fn range_to_offset_size_works() {
@@ -742,31 +716,4 @@ mod tests {
742716
fn range_to_offset_size_panics_for_unbounded_empty_range() {
743717
range_to_offset_size(..0);
744718
}
745-
746-
#[test]
747-
#[should_panic]
748-
fn check_buffer_bounds_panics_for_offset_at_size() {
749-
check_buffer_bounds(100, 100, None);
750-
}
751-
752-
#[test]
753-
fn check_buffer_bounds_works_for_end_in_range() {
754-
check_buffer_bounds(200, 100, BufferSize::new(50));
755-
check_buffer_bounds(200, 100, BufferSize::new(100));
756-
check_buffer_bounds(u64::MAX, u64::MAX - 100, BufferSize::new(100));
757-
check_buffer_bounds(u64::MAX, 0, BufferSize::new(u64::MAX));
758-
check_buffer_bounds(u64::MAX, 1, BufferSize::new(u64::MAX - 1));
759-
}
760-
761-
#[test]
762-
#[should_panic]
763-
fn check_buffer_bounds_panics_for_end_over_size() {
764-
check_buffer_bounds(200, 100, BufferSize::new(101));
765-
}
766-
767-
#[test]
768-
#[should_panic]
769-
fn check_buffer_bounds_panics_for_end_wraparound() {
770-
check_buffer_bounds(u64::MAX, 1, BufferSize::new(u64::MAX));
771-
}
772719
}

0 commit comments

Comments
 (0)