diff --git a/src/lib.rs b/src/lib.rs index 3f9081da2..097457d36 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -628,11 +628,9 @@ unsafe fn gen_picture(c: &mut Rav1dContext) -> Rav1dResult { } pub(crate) unsafe fn rav1d_send_data(c: &mut Rav1dContext, in_0: &mut Rav1dData) -> Rav1dResult { - validate_input!(( - in_0.data.as_ref().map_or(true, |data| !data.is_empty()), - EINVAL - ))?; if in_0.data.is_some() { + let sz = in_0.data.as_ref().unwrap().len(); + validate_input!((sz > 0 && sz <= usize::MAX / 2, EINVAL))?; c.drain = 0 as c_int; } if c.in_0.data.is_some() { @@ -1036,6 +1034,7 @@ pub unsafe extern "C" fn dav1d_data_wrap( || -> Rav1dResult { let buf = validate_input!(NonNull::new(buf).ok_or(EINVAL))?; let ptr = validate_input!(NonNull::new(ptr.cast_mut()).ok_or(EINVAL))?; + validate_input!((sz <= usize::MAX / 2, EINVAL))?; let data = slice::from_raw_parts(ptr.as_ptr(), sz).into(); let data = Rav1dData::wrap(data, free_callback, user_data)?; buf.as_ptr().write(data.into());