On 6/29/2024 8:37 PM, Michael Niedermayer wrote:
On Wed, Jun 26, 2024 at 09:52:44PM -0300, James Almer wrote:
On 3/22/2024 8:08 PM, Michael Niedermayer wrote:
Fixes: Timeout
Fixes:
67044/clusterfuzz-testcase-minimized-ffmpeg_dem_CAF_fuzzer-5791144363491328
Found-by: continuous fuzzing process
https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <mich...@niedermayer.cc>
---
libavformat/cafdec.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/libavformat/cafdec.c b/libavformat/cafdec.c
index 426c56b9bd..334077efb5 100644
--- a/libavformat/cafdec.c
+++ b/libavformat/cafdec.c
@@ -33,6 +33,7 @@
#include "isom.h"
#include "mov_chan.h"
#include "libavcodec/flac.h"
+#include "libavcodec/internal.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/intfloat.h"
#include "libavutil/dict.h"
@@ -87,6 +88,10 @@ static int read_desc_chunk(AVFormatContext *s)
st->codecpar->ch_layout.nb_channels = avio_rb32(pb);
st->codecpar->bits_per_coded_sample = avio_rb32(pb);
+ if (st->codecpar->ch_layout.nb_channels > FF_SANE_NB_CHANNELS ||
+ st->codecpar->bits_per_coded_sample > 64)
Where does the process take so long that oss-fuzz gets a timeout if these
are unreasonably high? I don't see nb_channels used anywhere in here where
that matters.
Is it in the PCM decoder? Because that decoder is meant to handle any
arbitrary amount of channels, so limiting it to whatever FF_SANE_NB_CHANNELS
is set to is not ok.
libavutil/channel_layout.c:627:17
or it will OOM before depending on how much memory is available
Does this fix the timeout?
diff --git a/libavutil/channel_layout.c b/libavutil/channel_layout.c
index 2d6963b6df..a4fcd199e1 100644
--- a/libavutil/channel_layout.c
+++ b/libavutil/channel_layout.c
@@ -623,6 +623,8 @@ int av_channel_layout_describe_bprint(const AVChannelLayout
*channel_layout,
for (i = 0; i < channel_layout->nb_channels; i++) {
enum AVChannel ch =
av_channel_layout_channel_from_index(channel_layout, i);
+ if (!av_bprint_is_complete(bp))
+ break;
if (i)
av_bprintf(bp, "+");
av_channel_name_bprint(bp, ch);
But this is not ok as it will affect the buffer len value
av_channel_layout_describe() returns on success when truncation took
place, so something else would have to be done.
And is the bits_per_coded_sample > 64 check to prevent codec_id being
AV_CODEC_ID_NONE? if so, how does that affect demuxing time?
AV_CODEC_ID_NONE for that matter could happen for valid files with a codec
we don't currently support.
We generally check read values for validity at the earliest,
bits_per_coded_sample of more than 64 seem not valid to me.
I agree the check is fine, but my point is that, assuming this is
affecting demuxing time, this check as is may be hiding an issue related
to codec_id being set to AV_CODEC_ID_NONE here (the result of
ff_get_pcm_codec_id() with an unsupported bits_per_coded_sample value),
so it should be looked at more closely because said codec_id could
happen with valid files using codecs the demuxer does not know about.
If it does not affect demuxing time and is a "just in case" check, then
it doesn't belong in a patch that says "Fixes: Timeout" and mentions an
ossfuzz issue.
thx
[...]
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".