ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinha...@outlook.com> | Fri May 30 16:02:08 2025 +0200| [0742239289b0d29d219cdb1f80ff1e0a345052d4] | committer: Andreas Rheinhardt
fftools/graph/graphprint: Fix races when initializing graphprint Setting print_graphs_format (in case no -print_graphs_format option was specified) is racy, as is using av_strtok() to split it. Both have been removed. Notice that using av_strtok() was destructive: In the absence of races the options would only have been applied for the first initialization. Reviewed-by: softworkz . <softworkz-at-hotmail....@ffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@outlook.com> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0742239289b0d29d219cdb1f80ff1e0a345052d4 --- fftools/graph/graphprint.c | 19 ++++--------------- fftools/textformat/avtextformat.c | 7 +++++-- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/fftools/graph/graphprint.c b/fftools/graph/graphprint.c index 423878326d..7f0e85d008 100644 --- a/fftools/graph/graphprint.c +++ b/fftools/graph/graphprint.c @@ -874,8 +874,6 @@ static int init_graphprint(GraphPrintContext **pgpc, AVBPrint *target_buf) AVTextFormatContext *tfc = NULL; AVTextWriterContext *wctx = NULL; GraphPrintContext *gpc = NULL; - char *w_args = NULL; - char *w_name; int ret; init_sections(); @@ -883,19 +881,7 @@ static int init_graphprint(GraphPrintContext **pgpc, AVBPrint *target_buf) av_bprint_init(target_buf, 0, AV_BPRINT_SIZE_UNLIMITED); - if (!print_graphs_format) - print_graphs_format = av_strdup("json"); - if (!print_graphs_format) { - ret = AVERROR(ENOMEM); - goto fail; - } - - w_name = av_strtok(print_graphs_format, "=", &w_args); - if (!w_name) { - av_log(NULL, AV_LOG_ERROR, "No name specified for the filter graph output format\n"); - ret = AVERROR(EINVAL); - goto fail; - } + const char *w_name = print_graphs_format ? print_graphs_format : "json"; text_formatter = avtext_get_formatter_by_name(w_name); if (!text_formatter) { @@ -912,6 +898,9 @@ static int init_graphprint(GraphPrintContext **pgpc, AVBPrint *target_buf) } AVTextFormatOptions tf_options = { .show_optional_fields = -1 }; + const char *w_args = print_graphs_format ? strchr(print_graphs_format, '=') : NULL; + if (w_args) + ++w_args; // consume '=' ret = avtext_context_open(&tfc, text_formatter, wctx, w_args, sections, FF_ARRAY_ELEMS(sections), tf_options, NULL); if (ret < 0) { goto fail; diff --git a/fftools/textformat/avtextformat.c b/fftools/textformat/avtextformat.c index bb90e66918..e8e43c3c37 100644 --- a/fftools/textformat/avtextformat.c +++ b/fftools/textformat/avtextformat.c @@ -706,9 +706,12 @@ const AVTextFormatter *avtext_get_formatter_by_name(const char *name) { formatters_register_all(); - for (int i = 0; registered_formatters[i]; i++) - if (!strcmp(registered_formatters[i]->name, name)) + for (int i = 0; registered_formatters[i]; i++) { + const char *end; + if (av_strstart(name, registered_formatters[i]->name, &end) && + (*end == '\0' || *end == '=')) return registered_formatters[i]; + } return NULL; } _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".