diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c index 178fac86cb..8fff9cc2cb 100644 --- a/libavformat/concatdec.c +++ b/libavformat/concatdec.c @@ -20,6 +20,7 @@ #include "libavutil/avassert.h" #include "libavutil/avstring.h" +#include "libavutil/bprint.h" #include "libavutil/intreadwrite.h" #include "libavutil/opt.h" #include "libavutil/parseutils.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; }