[FFmpeg-devel] [PATCH 2/2] avformat/concatdec: add support for very long line sizes

Nicolas George george at nsup.org
Sun Feb 11 15:45:34 EET 2018


Marton Balint (2018-02-10):
> Fixes ticket #6761.
> 
> Signed-off-by: Marton Balint <cus at passwd.hu>
> ---
>  libavformat/concatdec.c | 19 +++++++++++--------
>  1 file changed, 11 insertions(+), 8 deletions(-)
> 
> diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c
> index 178fac86cb..3e41a62a36 100644
> --- a/libavformat/concatdec.c
> +++ b/libavformat/concatdec.c
> @@ -24,6 +24,7 @@

>  #include "libavutil/opt.h"
>  #include "libavutil/parseutils.h"
>  #include "libavutil/timestamp.h"
> +#include "libavutil/bprint.h"

Nit: alphabetic order.

>  #include "avformat.h"
>  #include "internal.h"
>  #include "url.h"
> @@ -386,18 +387,18 @@ static int concat_read_close(AVFormatContext *avf)
>  static int concat_read_header(AVFormatContext *avf)
>  {
>      ConcatContext *cat = avf->priv_data;
> -    uint8_t buf[4096];
> +    AVBPrint bp;
>      uint8_t *cursor, *keyword;
> -    int ret, line = 0, i;
> +    int line = 0, i;
>      unsigned nb_files_alloc = 0;
>      ConcatFile *file = NULL;
> -    int64_t time = 0;
> +    int64_t ret, time = 0;
>  
> -    while (1) {
> -        if ((ret = ff_get_line(avf->pb, buf, sizeof(buf))) <= 0)
> -            break;
> +    av_bprint_init(&bp, 0, AV_BPRINT_SIZE_UNLIMITED);
> +
> +    while ((ret = ff_read_line_to_bprint_overwrite(avf->pb, &bp)) >= 0) {
>          line++;
> -        cursor = buf;
> +        cursor = bp.str;
>          keyword = get_keyword(&cursor);
>          if (!*keyword || *keyword == '#')
>              continue;
> @@ -473,7 +474,7 @@ static int concat_read_header(AVFormatContext *avf)
>              FAIL(AVERROR_INVALIDDATA);
>          }
>      }
> -    if (ret < 0)
> +    if (ret != AVERROR_EOF && ret < 0)
>          goto fail;
>      if (!cat->nb_files)
>          FAIL(AVERROR_INVALIDDATA);
> @@ -499,9 +500,11 @@ static int concat_read_header(AVFormatContext *avf)
>                                                 MATCH_ONE_TO_ONE;
>      if ((ret = open_file(avf, 0)) < 0)
>          goto fail;
> +    av_bprint_finalize(&bp, NULL);
>      return 0;
>  
>  fail:
> +    av_bprint_finalize(&bp, NULL);
>      concat_read_close(avf);
>      return ret;
>  }

LGTM, thanks.

Regards,

-- 
  Nicolas George
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20180211/f949e736/attachment.sig>


More information about the ffmpeg-devel mailing list