|
1 | | -use crate::Result; |
2 | 1 | use crate::rendering::BufferPool; |
| 2 | +use crate::{Error, Result}; |
3 | 3 |
|
4 | 4 | /// Specifies the type of blur operation, which affects how the CSS radius is interpreted. |
5 | 5 | #[derive(Debug, Clone, Copy, PartialEq)] |
@@ -138,7 +138,10 @@ pub(crate) fn apply_blur_rgba_bytes( |
138 | 138 | .saturating_mul(height as usize) |
139 | 139 | .saturating_mul(4); |
140 | 140 | if data.len() != expected { |
141 | | - return Ok(()); |
| 141 | + return Err(Error::InvalidRgbaBufferLength { |
| 142 | + actual: data.len(), |
| 143 | + expected, |
| 144 | + }); |
142 | 145 | } |
143 | 146 |
|
144 | 147 | let Some(pass_params) = blur_pass_params(width, height, radius, blur_type, width as usize * 4) |
@@ -373,3 +376,26 @@ fn compute_mul_shg(d: u32) -> (u32, i32) { |
373 | 376 | let mul = ((1u64 << shg) as f64 / d as f64).round() as u32; |
374 | 377 | (mul, shg) |
375 | 378 | } |
| 379 | + |
| 380 | +#[cfg(test)] |
| 381 | +mod tests { |
| 382 | + use super::{BlurType, apply_blur_rgba_bytes}; |
| 383 | + use crate::{Error, rendering::BufferPool}; |
| 384 | + |
| 385 | + #[test] |
| 386 | + fn apply_blur_rgba_bytes_returns_error_for_invalid_buffer_length() { |
| 387 | + let mut data = vec![0u8; 3]; |
| 388 | + let mut pool = BufferPool::default(); |
| 389 | + |
| 390 | + let err = apply_blur_rgba_bytes(&mut data, 1, 1, 4.0, BlurType::Filter, &mut pool) |
| 391 | + .expect_err("expected invalid RGBA buffer length error"); |
| 392 | + |
| 393 | + match err { |
| 394 | + Error::InvalidRgbaBufferLength { actual, expected } => { |
| 395 | + assert_eq!(actual, 3); |
| 396 | + assert_eq!(expected, 4); |
| 397 | + } |
| 398 | + _ => panic!("unexpected error variant: {err}"), |
| 399 | + } |
| 400 | + } |
| 401 | +} |
0 commit comments