avformat/oggdec: Factor buffer reallocation out

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
Michael Niedermayer 2020-05-01 14:33:46 +02:00
parent 3c740f2d9f
commit 5d5b0bbcb7

View File

@ -297,6 +297,20 @@ static int data_packets_seen(const struct ogg *ogg)
return 0;
}
static int buf_realloc(struct ogg_stream *os, int size)
{
/* Even if invalid guarantee there's enough memory to read the page */
if (os->bufsize - os->bufpos < size) {
uint8_t *nb = av_realloc(os->buf, 2*os->bufsize + AV_INPUT_BUFFER_PADDING_SIZE);
if (!nb)
return AVERROR(ENOMEM);
os->buf = nb;
os->bufsize *= 2;
}
return 0;
}
static int ogg_read_page(AVFormatContext *s, int *sid, int probing)
{
AVIOContext *bc = s->pb;
@ -378,14 +392,9 @@ static int ogg_read_page(AVFormatContext *s, int *sid, int probing)
if (idx >= 0) {
os = ogg->streams + idx;
/* Even if invalid guarantee there's enough memory to read the page */
if (os->bufsize - os->bufpos < size) {
uint8_t *nb = av_realloc(os->buf, 2*os->bufsize + AV_INPUT_BUFFER_PADDING_SIZE);
if (!nb)
return AVERROR(ENOMEM);
os->buf = nb;
os->bufsize *= 2;
}
ret = buf_realloc(os, size);
if (ret < 0)
return ret;
readout_buf = os->buf + os->bufpos;
} else {