[FFmpeg-devel] [PATCH v1] avformat/dashenc: use av_asprintf()

Andreas Rheinhardt andreas.rheinhardt at gmail.com
Tue Apr 7 20:08:56 EEST 2020


lance.lmwang at gmail.com:
> From: Limin Wang <lance.lmwang at gmail.com>
> 
> Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
> ---
>  libavformat/dashenc.c | 23 ++++++-----------------
>  1 file changed, 6 insertions(+), 17 deletions(-)
> 
> diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c
> index 94d4639..0c281a4 100644
> --- a/libavformat/dashenc.c
> +++ b/libavformat/dashenc.c
> @@ -1832,27 +1832,16 @@ static void dashenc_delete_file(AVFormatContext *s, char *filename) {
>  static int dashenc_delete_segment_file(AVFormatContext *s, const char* file)
>  {
>      DASHContext *c = s->priv_data;
> -    size_t dirname_len, file_len;
> -    char filename[1024];
> -
> -    dirname_len = strlen(c->dirname);
> -    if (dirname_len >= sizeof(filename)) {
> -        av_log(s, AV_LOG_WARNING, "Cannot delete segments as the directory path is too long: %"PRIu64" characters: %s\n",
> -            (uint64_t)dirname_len, c->dirname);
> -        return AVERROR(ENAMETOOLONG);
> -    }
> +    char *filename;
>  
> -    memcpy(filename, c->dirname, dirname_len);
> -
> -    file_len = strlen(file);
> -    if ((dirname_len + file_len) >= sizeof(filename)) {
> -        av_log(s, AV_LOG_WARNING, "Cannot delete segments as the path is too long: %"PRIu64" characters: %s%s\n",
> -            (uint64_t)(dirname_len + file_len), c->dirname, file);
> -        return AVERROR(ENAMETOOLONG);
> +    filename = av_asprintf("%s%s", c->dirname, file);
> +    if (!filename) {
> +        av_log(s, AV_LOG_WARNING, "Out of memory for filename\n");
> +        return AVERROR(ENOMEM);
>      }
>  
> -    memcpy(filename + dirname_len, file, file_len + 1); // include the terminating zero
>      dashenc_delete_file(s, filename);
> +    av_free(filename);
>  
>      return 0;
>  }
> 
It's good to remove these arbitrary restrictions, but you are adding an
allocation whereas the old code had none. You can get the best of both
approaches by using an AVBPrint.

And the commit title should mention that you remove an arbitrary
restriction on the length of filenames. This is more important than the
switch from one function to another.

- Andreas


More information about the ffmpeg-devel mailing list