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