aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGyan Doshi <ffmpeg@gyani.pro>2021-07-03 17:02:59 +0530
committerGyan Doshi <ffmpeg@gyani.pro>2021-07-04 09:54:33 +0530
commit301d275301d72387732ccdc526babaf984ddafe5 (patch)
treee5bcef59821f6bcdd9473ccdad647b467cca3d0f
parent70874e024a6eae0f95bd8dd4b9b4367ffd937f41 (diff)
downloadffmpeg-301d275301d72387732ccdc526babaf984ddafe5.tar.gz
avcodec/bsf: switch to av_get_token to parse bsf list string
The recently added setts bsf makes use of the eval API whose expressions can contain commas. The existing parsing in av_bsf_list_parse_str() uses av_strtok to naively split the string at commas, thus preventing the use of setts filter with expressions containing commas. av_get_token can work with escaped commas, allowing full use of setts.
-rw-r--r--libavcodec/bsf.c15
1 files changed, 4 insertions, 11 deletions
diff --git a/libavcodec/bsf.c b/libavcodec/bsf.c
index 9d67ea5395..0305244f8d 100644
--- a/libavcodec/bsf.c
+++ b/libavcodec/bsf.c
@@ -520,7 +520,6 @@ static int bsf_parse_single(char *str, AVBSFList *bsf_lst)
int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf_lst)
{
AVBSFList *lst;
- char *bsf_str, *buf, *dup, *saveptr;
int ret;
if (!str)
@@ -530,24 +529,18 @@ int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf_lst)
if (!lst)
return AVERROR(ENOMEM);
- if (!(dup = buf = av_strdup(str))) {
- ret = AVERROR(ENOMEM);
- goto end;
- }
-
- while (bsf_str = av_strtok(buf, ",", &saveptr)) {
+ do {
+ char *bsf_str = av_get_token(&str, ",");
ret = bsf_parse_single(bsf_str, lst);
+ av_free(bsf_str);
if (ret < 0)
goto end;
-
- buf = NULL;
- }
+ } while (*str && *++str);
ret = av_bsf_list_finalize(&lst, bsf_lst);
end:
if (ret < 0)
av_bsf_list_free(&lst);
- av_free(dup);
return ret;
}