aboutsummaryrefslogtreecommitdiffstats
path: root/nihav-codec-support/src
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2020-04-04 12:27:55 +0200
committerKostya Shishkov <kostya.shishkov@gmail.com>2020-04-04 12:27:55 +0200
commitdf05c4383da3fc259763db9b905dff548e74e2be (patch)
treec44edc0bc10197ed8c0505d1c6fb9be5df1c8e96 /nihav-codec-support/src
parent1b6a1780de9e8f350bfea12394bbf1d59bef4d46 (diff)
downloadnihav-df05c4383da3fc259763db9b905dff548e74e2be.tar.gz
codec_support/h263: validate that B-frame has enough reference data
Diffstat (limited to 'nihav-codec-support/src')
-rw-r--r--nihav-codec-support/src/codecs/h263/decoder.rs4
1 files changed, 4 insertions, 0 deletions
diff --git a/nihav-codec-support/src/codecs/h263/decoder.rs b/nihav-codec-support/src/codecs/h263/decoder.rs
index 7a88882..02d6075 100644
--- a/nihav-codec-support/src/codecs/h263/decoder.rs
+++ b/nihav-codec-support/src/codecs/h263/decoder.rs
@@ -213,6 +213,10 @@ impl H263BaseDecoder {
}
let is_b = pinfo.mode == Type::B;
+ if is_b && (self.mv_data.len() < self.mb_w * self.mb_h) {
+ return Err(DecoderError::MissingReference);
+ }
+
let tsdiff = if pinfo.is_pb() { pinfo.ts.wrapping_sub(self.last_ts) >> 1 }
else { self.last_ts.wrapping_sub(self.next_ts) >> 1 };
let bsdiff = if pinfo.is_pb() { (pinfo.get_pbinfo().get_trb() as u16) << 7 }