mirror of
https://github.com/storytold/effectcraft.git
synced 2026-11-14 05:21:34 +00:00
address review: checked size arithmetic in the encoder's short-plane guard
This commit is contained in:
@@ -236,9 +236,13 @@ impl Vp9Encoder {
|
||||
/// samples that are not there.
|
||||
pub fn encode_frame(&mut self, y: &[u8], u: &[u8], v: &[u8], force_key: bool) -> EncodedFrame {
|
||||
let (w, h) = (self.cfg.width.max(1) as usize, self.cfg.height.max(1) as usize);
|
||||
let chroma = w.div_ceil(2) * h.div_ceil(2);
|
||||
if y.len() < w * h || u.len() < chroma || v.len() < chroma {
|
||||
return EncodedFrame { data: vec![], key: false, q_idx: 0, filter_level: 0 };
|
||||
let empty = || EncodedFrame { data: vec![], key: false, q_idx: 0, filter_level: 0 };
|
||||
// Checked: on 32-bit targets (wasm32) a huge size would wrap to a small one.
|
||||
let (Some(luma), Some(chroma)) = (w.checked_mul(h), w.div_ceil(2).checked_mul(h.div_ceil(2))) else {
|
||||
return empty();
|
||||
};
|
||||
if y.len() < luma || u.len() < chroma || v.len() < chroma {
|
||||
return empty();
|
||||
}
|
||||
let key = self.is_key_due(force_key);
|
||||
let qidx = self.pick_qidx(key);
|
||||
|
||||
Reference in New Issue
Block a user