[FFmpeg-cvslog] avcodec/bsf: switch to av_get_token to parse bsf list string

Gyan Doshi git at videolan.org
Sun Jul 4 07:25:48 EEST 2021


ffmpeg | branch: master | Gyan Doshi <ffmpeg at gyani.pro> | Sat Jul  3 17:20:59 2021 +0530| [301d275301d72387732ccdc526babaf984ddafe5] | committer: Gyan Doshi

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.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=301d275301d72387732ccdc526babaf984ddafe5
---

 libavcodec/bsf.c | 15 ++++-----------
 1 file 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;
 }
 



More information about the ffmpeg-cvslog mailing list