From 4a6a7465d03f0b581122f11385aca87294eebd5d Mon Sep 17 00:00:00 2001 From: Andreas Pehrson Date: Tue, 26 Nov 2024 23:59:42 +0100 Subject: [PATCH] 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 Commit-Queue: Danil Chapovalov Reviewed-by: Tomas Gunnarsson Reviewed-by: Danil Chapovalov Cr-Commit-Position: refs/heads/main@{#43463} --- common_video/h264/h264_bitstream_parser.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/common_video/h264/h264_bitstream_parser.cc b/common_video/h264/h264_bitstream_parser.cc index 56158fd340..620dc7f35d 100644 --- a/common_video/h264/h264_bitstream_parser.cc +++ b/common_video/h264/h264_bitstream_parser.cc @@ -118,13 +118,15 @@ H264BitstreamParser::Result H264BitstreamParser::ParseNonParameterSetNalu( if (slice_reader.Read()) { // 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; } }