avformat/concatdec: add support for very long line sizes
Fixes ticket #6761. Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
parent
dcb2ef2211
commit
ffabff1baa
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include "libavutil/avassert.h"
|
#include "libavutil/avassert.h"
|
||||||
#include "libavutil/avstring.h"
|
#include "libavutil/avstring.h"
|
||||||
|
#include "libavutil/bprint.h"
|
||||||
#include "libavutil/intreadwrite.h"
|
#include "libavutil/intreadwrite.h"
|
||||||
#include "libavutil/opt.h"
|
#include "libavutil/opt.h"
|
||||||
#include "libavutil/parseutils.h"
|
#include "libavutil/parseutils.h"
|
||||||
@ -386,18 +387,18 @@ static int concat_read_close(AVFormatContext *avf)
|
|||||||
static int concat_read_header(AVFormatContext *avf)
|
static int concat_read_header(AVFormatContext *avf)
|
||||||
{
|
{
|
||||||
ConcatContext *cat = avf->priv_data;
|
ConcatContext *cat = avf->priv_data;
|
||||||
uint8_t buf[4096];
|
AVBPrint bp;
|
||||||
uint8_t *cursor, *keyword;
|
uint8_t *cursor, *keyword;
|
||||||
int ret, line = 0, i;
|
int line = 0, i;
|
||||||
unsigned nb_files_alloc = 0;
|
unsigned nb_files_alloc = 0;
|
||||||
ConcatFile *file = NULL;
|
ConcatFile *file = NULL;
|
||||||
int64_t time = 0;
|
int64_t ret, time = 0;
|
||||||
|
|
||||||
while (1) {
|
av_bprint_init(&bp, 0, AV_BPRINT_SIZE_UNLIMITED);
|
||||||
if ((ret = ff_get_line(avf->pb, buf, sizeof(buf))) <= 0)
|
|
||||||
break;
|
while ((ret = ff_read_line_to_bprint_overwrite(avf->pb, &bp)) >= 0) {
|
||||||
line++;
|
line++;
|
||||||
cursor = buf;
|
cursor = bp.str;
|
||||||
keyword = get_keyword(&cursor);
|
keyword = get_keyword(&cursor);
|
||||||
if (!*keyword || *keyword == '#')
|
if (!*keyword || *keyword == '#')
|
||||||
continue;
|
continue;
|
||||||
@ -473,7 +474,7 @@ static int concat_read_header(AVFormatContext *avf)
|
|||||||
FAIL(AVERROR_INVALIDDATA);
|
FAIL(AVERROR_INVALIDDATA);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ret < 0)
|
if (ret != AVERROR_EOF && ret < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
if (!cat->nb_files)
|
if (!cat->nb_files)
|
||||||
FAIL(AVERROR_INVALIDDATA);
|
FAIL(AVERROR_INVALIDDATA);
|
||||||
@ -499,9 +500,11 @@ static int concat_read_header(AVFormatContext *avf)
|
|||||||
MATCH_ONE_TO_ONE;
|
MATCH_ONE_TO_ONE;
|
||||||
if ((ret = open_file(avf, 0)) < 0)
|
if ((ret = open_file(avf, 0)) < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
av_bprint_finalize(&bp, NULL);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
|
av_bprint_finalize(&bp, NULL);
|
||||||
concat_read_close(avf);
|
concat_read_close(avf);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user