diff options
author | Marton Balint <cus@passwd.hu> | 2018-02-03 22:05:21 +0100 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2018-02-24 20:21:35 +0100 |
commit | ffabff1baa0873a2aa9c0c09ec93b2f4191493b5 (patch) | |
tree | a3bb12edb633094e982b2600e12da7f013efe1d5 /libavformat/concatdec.c | |
parent | dcb2ef2211fd472b4fa235e9f1c4a48582e44049 (diff) | |
download | ffmpeg-ffabff1baa0873a2aa9c0c09ec93b2f4191493b5.tar.gz |
avformat/concatdec: add support for very long line sizes
Fixes ticket #6761.
Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavformat/concatdec.c')
-rw-r--r-- | libavformat/concatdec.c | 19 |
1 files changed, 11 insertions, 8 deletions
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; } |