In ParseNonParameterSetNalu check BitstreamReader::Ok before returning early

~BitstreamReader() DCHECKs that the last read has been verified, so all
paths where we may leave the slice_reader instance's scope early must be
guarded by an Ok().

Bug: None
Change-Id: Ic67f87c04d1f042392c1dd6a066fdccf26e19003
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/369540
Reviewed-by: Sergey Silkin <ssilkin@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#43463}
This commit is contained in:
Andreas Pehrson 2024-11-26 23:59:42 +01:00 committed by WebRTC LUCI CQ
parent 4060745995
commit 4a6a7465d0

View File

@ -118,13 +118,15 @@ H264BitstreamParser::Result H264BitstreamParser::ParseNonParameterSetNalu(
if (slice_reader.Read<bool>()) {
// num_ref_idx_l0_active_minus1: ue(v)
num_ref_idx_l0_active_minus1 = slice_reader.ReadExponentialGolomb();
if (num_ref_idx_l0_active_minus1 > H264::kMaxReferenceIndex) {
if (!slice_reader.Ok() ||
num_ref_idx_l0_active_minus1 > H264::kMaxReferenceIndex) {
return kInvalidStream;
}
if (slice_type == H264::SliceType::kB) {
// num_ref_idx_l1_active_minus1: ue(v)
num_ref_idx_l1_active_minus1 = slice_reader.ReadExponentialGolomb();
if (num_ref_idx_l1_active_minus1 > H264::kMaxReferenceIndex) {
if (!slice_reader.Ok() ||
num_ref_idx_l1_active_minus1 > H264::kMaxReferenceIndex) {
return kInvalidStream;
}
}