From a97ad12465996b7673ae05434cf82e6081c6a0c4 Mon Sep 17 00:00:00 2001 From: Xiaoming Shi Date: Sat, 25 Jul 2026 16:40:50 -0700 Subject: [PATCH] starboard: Fix unsafe integer in AudioTrack sink Fix potential overflow and narrowing issues in AudioTrackAudioSink. Change accumulated_written_frames, last_playback_head_position, and playback_head_position to int64_t to prevent overflow after long playback times (~12.4 hours at 48kHz). Update GetFramesDurationUs to accept int64_t. Bug: 511356295 TAG=agy CONV=0d3a836a-08df-4860-a867-0f6affc85b25 --- starboard/android/shared/audio_track_audio_sink_type.cc | 8 ++++---- starboard/android/shared/audio_track_audio_sink_type.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/starboard/android/shared/audio_track_audio_sink_type.cc b/starboard/android/shared/audio_track_audio_sink_type.cc index d9d180478b44..5f62b3b76d66 100644 --- a/starboard/android/shared/audio_track_audio_sink_type.cc +++ b/starboard/android/shared/audio_track_audio_sink_type.cc @@ -261,10 +261,10 @@ void AudioTrackAudioSink::AudioThreadFunc() { SB_LOG(INFO) << "AudioTrackAudioSink thread started."; - int accumulated_written_frames = 0; + int64_t accumulated_written_frames = 0; int64_t last_playback_head_event_at = -1; // microseconds - int last_playback_head_position = 0; + int64_t last_playback_head_position = 0; bool release_frames_after_audio_starts = features::FeatureList::IsEnabled( features::kReleaseVideoFramesAfterAudioStarts); @@ -284,7 +284,7 @@ void AudioTrackAudioSink::AudioThreadFunc() { continue; } - int playback_head_position = 0; + int64_t playback_head_position = 0; int64_t frames_consumed_at = 0; if (audio_track_->GetAndResetHasAudioDeviceChanged()) { SB_LOG(INFO) << "Audio device changed, raising a capability changed " @@ -515,7 +515,7 @@ void AudioTrackAudioSink::ReportError(bool capability_changed, } } -int64_t AudioTrackAudioSink::GetFramesDurationUs(int frames) const { +int64_t AudioTrackAudioSink::GetFramesDurationUs(int64_t frames) const { return frames * 1'000'000LL / sampling_frequency_hz_; } diff --git a/starboard/android/shared/audio_track_audio_sink_type.h b/starboard/android/shared/audio_track_audio_sink_type.h index 5bfb2ccfe692..2344278fef83 100644 --- a/starboard/android/shared/audio_track_audio_sink_type.h +++ b/starboard/android/shared/audio_track_audio_sink_type.h @@ -169,7 +169,7 @@ class AudioTrackAudioSink : public SbAudioSinkImpl { void ReportError(bool capability_changed, const std::string& error_message); - int64_t GetFramesDurationUs(int frames) const; + int64_t GetFramesDurationUs(int64_t frames) const; const raw_ptr type_; const int channels_;