mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 10:38:11 +00:00
Ladybird+LibWeb+WebContent: Prevent out-of-bounds seeking audio elements
It's currently possible to seek to the total sample count of an audio loader. We must limit seeking to one less than that count. This mistake was duplicated in both AudioCodecPluginSerenity/Ladybird, so the computation was moved to a helper in the base AudioCodecPlugin.
This commit is contained in:
parent
20edbb70f8
commit
bcd222cfae
4 changed files with 17 additions and 16 deletions
|
@ -160,22 +160,14 @@ private:
|
|||
paused = Paused::Yes;
|
||||
break;
|
||||
|
||||
case AudioTask::Type::Seek: {
|
||||
case AudioTask::Type::Seek:
|
||||
VERIFY(task.data.has_value());
|
||||
auto position = *task.data;
|
||||
m_position = Web::Platform::AudioCodecPlugin::set_loader_position(m_loader, *task.data, m_duration, audio_output->format().sampleRate());
|
||||
|
||||
auto duration = static_cast<double>(this->duration().to_milliseconds()) / 1000.0;
|
||||
position = position / duration * static_cast<double>(m_loader->total_samples());
|
||||
|
||||
m_loader->seek(static_cast<int>(position)).release_value_but_fixme_should_propagate_errors();
|
||||
|
||||
if (paused == Paused::Yes) {
|
||||
m_position = Web::Platform::AudioCodecPlugin::current_loader_position(m_loader, audio_output->format().sampleRate());
|
||||
if (paused == Paused::Yes)
|
||||
Q_EMIT playback_position_updated(m_position);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case AudioTask::Type::Volume:
|
||||
VERIFY(task.data.has_value());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue