From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
To: ffmpeg-devel@ffmpeg.org
Cc: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Subject: [FFmpeg-devel] [PATCH 5/7] fftools/ffmpeg_demux: Don't use fake object with av_opt_eval
Date: Sat, 7 Oct 2023 02:40:29 +0200
Message-ID: <AS8P250MB07447F0DA55E7B9C5020244E8FC8A@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM> (raw)
In-Reply-To: <AS8P250MB07449BD309DE98BE5A7D6D468FC8A@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM>
The av_opt_eval family of functions emits errors messages on error
and can therefore not be used with fake objects when the AVClass
has a custom item_name callback. The AVClass for AVCodecContext
has such a custom callback (it searches whether an AVCodec is set
to use its name). In practice it means that whatever is directly
after the "cc" pointer to the AVClass for AVCodec in the stack frame
of ist_add() will be treated as a pointer to an AVCodec with
unpredictable consequences.
Fix this by using an actual AVCodecContext instead of a fake object.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
fftools/ffmpeg_demux.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c
index c71edf01a5..41fcb678c6 100644
--- a/fftools/ffmpeg_demux.c
+++ b/fftools/ffmpeg_demux.c
@@ -1042,9 +1042,6 @@ static int ist_add(const OptionsContext *o, Demuxer *d, AVStream *st)
char *codec_tag = NULL;
char *next;
char *discard_str = NULL;
- const AVClass *cc = avcodec_get_class();
- const AVOption *discard_opt = av_opt_find(&cc, "skip_frame", NULL,
- 0, AV_OPT_SEARCH_FAKE_OBJ);
int ret;
ds = demux_stream_alloc(d, st);
@@ -1176,18 +1173,20 @@ static int ist_add(const OptionsContext *o, Demuxer *d, AVStream *st)
(o->data_disable && ist->st->codecpar->codec_type == AVMEDIA_TYPE_DATA))
ist->user_set_discard = AVDISCARD_ALL;
+ ist->dec_ctx = avcodec_alloc_context3(ist->dec);
+ if (!ist->dec_ctx)
+ return AVERROR(ENOMEM);
+
if (discard_str) {
- ret = av_opt_eval_int(&cc, discard_opt, discard_str, &ist->user_set_discard);
+ const AVOption *discard_opt = av_opt_find(ist->dec_ctx, "skip_frame",
+ NULL, 0, 0);
+ ret = av_opt_eval_int(ist->dec_ctx, discard_opt, discard_str, &ist->user_set_discard);
if (ret < 0) {
av_log(ist, AV_LOG_ERROR, "Error parsing discard %s.\n", discard_str);
return ret;
}
}
- ist->dec_ctx = avcodec_alloc_context3(ist->dec);
- if (!ist->dec_ctx)
- return AVERROR(ENOMEM);
-
ret = avcodec_parameters_to_context(ist->dec_ctx, par);
if (ret < 0) {
av_log(ist, AV_LOG_ERROR, "Error initializing the decoder context.\n");
--
2.34.1
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2023-10-07 0:39 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-07 0:37 [FFmpeg-devel] [PATCH 1/7] avcodec/wmv2dec: Parse extradata during init Andreas Rheinhardt
2023-10-07 0:40 ` [FFmpeg-devel] [PATCH 2/7] avcodec/h261dec, vc1dec: Don't set write-only macroblock dimensions Andreas Rheinhardt
2023-10-07 20:34 ` Michael Niedermayer
2023-10-14 20:05 ` Andreas Rheinhardt
2023-10-07 0:40 ` [FFmpeg-devel] [PATCH 3/7] avcodec/h261dec: Don't set write-only picture_number Andreas Rheinhardt
2023-10-11 19:48 ` Andreas Rheinhardt
2023-10-07 0:40 ` [FFmpeg-devel] [PATCH 4/7] avcodec/h261dec: Remove pointless goto Andreas Rheinhardt
2023-10-08 16:40 ` Michael Niedermayer
2023-10-07 0:40 ` Andreas Rheinhardt [this message]
2023-10-10 11:48 ` [FFmpeg-devel] [PATCH 5/7] fftools/ffmpeg_demux: Don't use fake object with av_opt_eval Anton Khirnov
2023-10-07 0:40 ` [FFmpeg-devel] [PATCH 6/7] fftools/ffmpeg_demux: Fix leak on error Andreas Rheinhardt
2023-10-10 11:51 ` Anton Khirnov
2023-10-07 0:40 ` [FFmpeg-devel] [PATCH 7/7] avcodec/h261dec: Discard whole packet when discarding Andreas Rheinhardt
2023-10-07 10:16 ` [FFmpeg-devel] [PATCH 8/8] avcodec/mpeg4video_parser: Don't set write-only current_picture_ptr Andreas Rheinhardt
2023-10-08 16:45 ` [FFmpeg-devel] [PATCH 1/7] avcodec/wmv2dec: Parse extradata during init Michael Niedermayer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=AS8P250MB07447F0DA55E7B9C5020244E8FC8A@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM \
--to=andreas.rheinhardt@outlook.com \
--cc=ffmpeg-devel@ffmpeg.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git