aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2025-06-21 03:31:03 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2025-07-03 20:21:55 +0200
commit73646259a07188a38a9f712a55c7516a98c42668 (patch)
tree1b5efc57375fd4a9cb1522baf6b38127af857a3f
parent82fa6b450d1a23baf88ef5714d9603c1855ffeab (diff)
downloadffmpeg-73646259a07188a38a9f712a55c7516a98c42668.tar.gz
avcodec/avcodec: Check sample_rate generically
Check that all audio codecs except decoders with the AV_CODEC_CAP_CHANNEL_CONF flag have a positive sample rate set. Fixes: AVERROR_BUG return Fixes: 413997604/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_HCA_fuzzer-5188382613635072 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
-rw-r--r--libavcodec/avcodec.c6
-rw-r--r--libavcodec/encode.c5
2 files changed, 5 insertions, 6 deletions
diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c
index 03c3d09b87..834b7ad242 100644
--- a/libavcodec/avcodec.c
+++ b/libavcodec/avcodec.c
@@ -255,7 +255,11 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code
}
}
- if (avctx->sample_rate < 0) {
+ /* AV_CODEC_CAP_CHANNEL_CONF is a decoder-only flag; so the code below
+ * in particular checks that sample_rate is set for all audio encoders. */
+ if (avctx->sample_rate < 0 ||
+ avctx->sample_rate == 0 && avctx->codec_type == AVMEDIA_TYPE_AUDIO &&
+ !(codec->capabilities & AV_CODEC_CAP_CHANNEL_CONF)) {
av_log(avctx, AV_LOG_ERROR, "Invalid sample rate: %d\n", avctx->sample_rate);
ret = AVERROR(EINVAL);
goto free_and_end;
diff --git a/libavcodec/encode.c b/libavcodec/encode.c
index 72dfa8867a..38833c566c 100644
--- a/libavcodec/encode.c
+++ b/libavcodec/encode.c
@@ -633,11 +633,6 @@ static int encode_preinit_audio(AVCodecContext *avctx)
avctx->sample_fmt);
return AVERROR(EINVAL);
}
- if (avctx->sample_rate <= 0) {
- av_log(avctx, AV_LOG_ERROR, "Invalid audio sample rate: %d\n",
- avctx->sample_rate);
- return AVERROR(EINVAL);
- }
ret = avcodec_get_supported_config(avctx, NULL, AV_CODEC_CONFIG_SAMPLE_FORMAT,
0, (const void **) &sample_fmts,