summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-09-11 12:13:44 +0200
committerMichael Niedermayer <michaelni@gmx.at>2013-09-11 12:21:21 +0200
commit8c9d6ee4f2ad84114cf65944d91157069825423e (patch)
tree406dd6025e3e623b693618db8f885c825b18887c /libavformat
parent5ca39a0b899ae4542de8ed77b7a7f139e74d66ab (diff)
avformat/utils: functions that add entries should not destroy the whole list on failure
The caller does not expect this, and in case of adding new streams would then not even be able to deallocate them anymore. This reverts a hunk from "avformat: Use av_reallocp_array() where suitable" Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/utils.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 9c21ae0fe1..4d4b701baa 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -3296,11 +3296,14 @@ AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c)
{
AVStream *st;
int i;
+ AVStream **streams;
- if (av_reallocp_array(&s->streams, s->nb_streams + 1, sizeof(*s->streams)) < 0) {
- s->nb_streams = 0;
+ if (s->nb_streams >= INT_MAX/sizeof(*streams))
return NULL;
- }
+ streams = av_realloc(s->streams, (s->nb_streams + 1) * sizeof(*streams));
+ if (!streams)
+ return NULL;
+ s->streams = streams;
st = av_mallocz(sizeof(AVStream));
if (!st)
@@ -3404,6 +3407,7 @@ void ff_program_add_stream_index(AVFormatContext *ac, int progid, unsigned int i
{
int i, j;
AVProgram *program=NULL;
+ void *tmp;
if (idx >= ac->nb_streams) {
av_log(ac, AV_LOG_ERROR, "stream index %d is not valid\n", idx);
@@ -3418,12 +3422,10 @@ void ff_program_add_stream_index(AVFormatContext *ac, int progid, unsigned int i
if(program->stream_index[j] == idx)
return;
- if (av_reallocp_array(&program->stream_index,
- program->nb_stream_indexes + 1,
- sizeof(*program->stream_index)) < 0) {
- program->nb_stream_indexes = 0;
+ tmp = av_realloc(program->stream_index, sizeof(unsigned int)*(program->nb_stream_indexes+1));
+ if(!tmp)
return;
- }
+ program->stream_index = tmp;
program->stream_index[program->nb_stream_indexes++] = idx;
return;
}