1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-04 22:03:09 +02:00

fftools/textformat/avtextformat: Fix races when initializing formatters

Reviewed-by: softworkz . <softworkz-at-hotmail.com@ffmpeg.org>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt
2025-06-01 04:28:12 +02:00
parent 4947e56974
commit 6f452ad1ac

View File

@ -681,31 +681,22 @@ fail:
return ret; return ret;
} }
static const AVTextFormatter *registered_formatters[9 + 1]; static const AVTextFormatter *const registered_formatters[] =
static void formatters_register_all(void)
{ {
static int initialized; &avtextformatter_default,
&avtextformatter_compact,
if (initialized) &avtextformatter_csv,
return; &avtextformatter_flat,
initialized = 1; &avtextformatter_ini,
&avtextformatter_json,
registered_formatters[0] = &avtextformatter_default; &avtextformatter_xml,
registered_formatters[1] = &avtextformatter_compact; &avtextformatter_mermaid,
registered_formatters[2] = &avtextformatter_csv; &avtextformatter_mermaidhtml,
registered_formatters[3] = &avtextformatter_flat; NULL
registered_formatters[4] = &avtextformatter_ini; };
registered_formatters[5] = &avtextformatter_json;
registered_formatters[6] = &avtextformatter_xml;
registered_formatters[7] = &avtextformatter_mermaid;
registered_formatters[8] = &avtextformatter_mermaidhtml;
}
const AVTextFormatter *avtext_get_formatter_by_name(const char *name) const AVTextFormatter *avtext_get_formatter_by_name(const char *name)
{ {
formatters_register_all();
for (int i = 0; registered_formatters[i]; i++) { for (int i = 0; registered_formatters[i]; i++) {
const char *end; const char *end;
if (av_strstart(name, registered_formatters[i]->name, &end) && if (av_strstart(name, registered_formatters[i]->name, &end) &&