aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-09-11 13:07:00 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2024-04-03 19:14:12 +0200
commit0c800c0b48f94edfa82e4bd4579ef3f27fdc49c2 (patch)
treea3c669e16a0a680f378f212e1ef0c6f2e2588d5d
parentc96d0a0b850f7068cb1de2206dae02bf44514e57 (diff)
downloadffmpeg-0c800c0b48f94edfa82e4bd4579ef3f27fdc49c2.tar.gz
avfilter/avfilter: Honour the short options documentation
The documentation for filter arguments states that short options must precede long options (i.e. those of the form key=value). Yet if process_options() encounters arguments not abiding by this, it simply treats short options after a long option as if it were parsing short options for the first time. In particular, it overwrites options already set earlier, possibly via other short options. This is not how it is intended (as a comment in the code indicates). This commit modifies the code to reject further shorthand options after a long option has been encountered. After all, avfilter_init_str() errors out upon unrecognized options, so it is intended to be picky. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
-rw-r--r--libavfilter/avfilter.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index 508fe1b26b..21d6832deb 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -846,9 +846,7 @@ int ff_filter_opt_parse(void *logctx, const AVClass *priv_class,
const char *shorthand = NULL;
int additional_flags = 0;
- if (priv_class)
- o = av_opt_next(&priv_class, o);
- if (o) {
+ if (priv_class && (o = av_opt_next(&priv_class, o))) {
if (o->type == AV_OPT_TYPE_CONST || o->offset == offset)
continue;
offset = o->offset;
@@ -871,9 +869,7 @@ int ff_filter_opt_parse(void *logctx, const AVClass *priv_class,
if (parsed_key) {
key = parsed_key;
additional_flags = AV_DICT_DONT_STRDUP_KEY;
- /* discard all remaining shorthand */
- if (priv_class)
- while ((o = av_opt_next(&priv_class, o)));
+ priv_class = NULL; /* reject all remaining shorthand */
} else {
key = shorthand;
}