mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 06:07:34 +00:00
LibAudio: Treat FLAC bps <= wasted_bps as error instead of crash
This can happen with some weird inputs, so instead, return an error; we need at least one “effective” bit per sample so the bits per sample cannot be less than or equal to the wasted bits per sample.
This commit is contained in:
parent
c776ebcaf6
commit
dcc3d7bc35
1 changed files with 21 additions and 3 deletions
|
@ -746,7 +746,13 @@ ErrorOr<Vector<i64>, LoaderError> FlacLoaderPlugin::decode_verbatim(FlacSubframe
|
|||
Vector<i64> decoded;
|
||||
decoded.ensure_capacity(m_current_frame->sample_count);
|
||||
|
||||
VERIFY(subframe.bits_per_sample - subframe.wasted_bits_per_sample != 0);
|
||||
if (subframe.bits_per_sample <= subframe.wasted_bits_per_sample) {
|
||||
return LoaderError {
|
||||
LoaderError::Category::Format,
|
||||
TRY(m_stream->tell()),
|
||||
"Effective verbatim bits per sample are zero"sv,
|
||||
};
|
||||
}
|
||||
for (size_t i = 0; i < m_current_frame->sample_count; ++i) {
|
||||
decoded.unchecked_append(sign_extend(
|
||||
TRY(bit_input.read_bits<u64>(subframe.bits_per_sample - subframe.wasted_bits_per_sample)),
|
||||
|
@ -766,7 +772,13 @@ ErrorOr<void, LoaderError> FlacLoaderPlugin::decode_custom_lpc(Vector<i64>& deco
|
|||
|
||||
decoded.ensure_capacity(m_current_frame->sample_count);
|
||||
|
||||
VERIFY(subframe.bits_per_sample - subframe.wasted_bits_per_sample != 0);
|
||||
if (subframe.bits_per_sample <= subframe.wasted_bits_per_sample) {
|
||||
return LoaderError {
|
||||
LoaderError::Category::Format,
|
||||
TRY(m_stream->tell()),
|
||||
"Effective verbatim bits per sample are zero"sv,
|
||||
};
|
||||
}
|
||||
// warm-up samples
|
||||
for (auto i = 0; i < subframe.order; ++i) {
|
||||
decoded.unchecked_append(sign_extend(
|
||||
|
@ -825,7 +837,13 @@ ErrorOr<Vector<i64>, LoaderError> FlacLoaderPlugin::decode_fixed_lpc(FlacSubfram
|
|||
Vector<i64> decoded;
|
||||
decoded.ensure_capacity(m_current_frame->sample_count);
|
||||
|
||||
VERIFY(subframe.bits_per_sample - subframe.wasted_bits_per_sample != 0);
|
||||
if (subframe.bits_per_sample <= subframe.wasted_bits_per_sample) {
|
||||
return LoaderError {
|
||||
LoaderError::Category::Format,
|
||||
TRY(m_stream->tell()),
|
||||
"Effective verbatim bits per sample are zero"sv,
|
||||
};
|
||||
}
|
||||
// warm-up samples
|
||||
for (auto i = 0; i < subframe.order; ++i) {
|
||||
decoded.unchecked_append(sign_extend(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue