Skip to content

Commit

Permalink
Add checks for media_codec_bridge null pointers. (#4846)
Browse files Browse the repository at this point in the history
This avoids dereferencing media_codec_bridge if it's a nullptr.

b/394434926
  • Loading branch information
jellefoks authored Feb 7, 2025
1 parent f58d6df commit dfe1b0f
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 0 deletions.
12 changes: 12 additions & 0 deletions starboard/android/shared/audio_decoder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,12 @@ void AudioDecoder::ProcessOutputBuffer(
SB_DCHECK(media_codec_bridge);
SB_DCHECK(output_cb_);
SB_DCHECK(dequeue_output_result.index >= 0);
if (!media_codec_bridge) {
ReportError(
kSbPlayerErrorDecode,
"Missing media_codec_bridge for processing audio output buffers.");
return;
}

if (dequeue_output_result.num_bytes > 0) {
ScopedJavaByteBuffer byte_buffer(
Expand Down Expand Up @@ -268,6 +274,12 @@ void AudioDecoder::ProcessOutputBuffer(
}

void AudioDecoder::RefreshOutputFormat(MediaCodecBridge* media_codec_bridge) {
SB_DCHECK(media_codec_bridge);
if (!media_codec_bridge) {
ReportError(kSbPlayerErrorDecode,
"Missing media_codec_bridge for audio output format.");
return;
}
AudioOutputFormatResult output_format =
media_codec_bridge->GetAudioOutputFormat();
if (output_format.status == MEDIA_CODEC_ERROR) {
Expand Down
8 changes: 8 additions & 0 deletions starboard/android/shared/media_decoder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,9 @@ void MediaDecoder::WriteEndOfStream() {
void MediaDecoder::SetPlaybackRate(double playback_rate) {
SB_DCHECK(media_type_ == kSbMediaTypeVideo);
SB_DCHECK(media_codec_bridge_);
if (!media_codec_bridge_) {
return;
}
media_codec_bridge_->SetPlaybackRate(playback_rate);
}

Expand Down Expand Up @@ -404,6 +407,11 @@ bool MediaDecoder::ProcessOneInputBuffer(
std::deque<Event>* pending_tasks,
std::vector<int>* input_buffer_indices) {
SB_DCHECK(media_codec_bridge_);
if (!media_codec_bridge_) {
ReportError(kSbPlayerErrorDecode,
"Missing media_codec_bridge for processing input buffer.");
return false;
}

// During secure playback, and only secure playback, it is possible that our
// attempt to enqueue an input buffer will be rejected by MediaCodec because
Expand Down
12 changes: 12 additions & 0 deletions starboard/android/shared/video_decoder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -887,8 +887,15 @@ void VideoDecoder::WriteInputBuffersInternal(
void VideoDecoder::ProcessOutputBuffer(
MediaCodecBridge* media_codec_bridge,
const DequeueOutputResult& dequeue_output_result) {
SB_DCHECK(media_codec_bridge);
SB_DCHECK(decoder_status_cb_);
SB_DCHECK(dequeue_output_result.index >= 0);
if (!media_codec_bridge) {
ReportError(
kSbPlayerErrorDecode,
"Missing media_codec_bridge for processing audio output buffers.");
return;
}

bool is_end_of_stream =
dequeue_output_result.flags & BUFFER_FLAG_END_OF_STREAM;
Expand Down Expand Up @@ -917,6 +924,11 @@ void VideoDecoder::ProcessOutputBuffer(

void VideoDecoder::RefreshOutputFormat(MediaCodecBridge* media_codec_bridge) {
SB_DCHECK(media_codec_bridge);
if (!media_codec_bridge) {
ReportError(kSbPlayerErrorDecode,
"Missing media_codec_bridge for video output format.");
return;
}
SB_DLOG(INFO) << "Output format changed, trying to dequeue again.";

ScopedLock lock(decode_target_mutex_);
Expand Down

0 comments on commit dfe1b0f

Please sign in to comment.