---
 libavformat/asfenc.c      |   10 ++++++----
 libavformat/gxfenc.c      |   18 ++++++++++--------
 libavformat/matroskadec.c |   11 +++++------
 libavformat/matroskaenc.c |   18 ++++++++++++------
 libavformat/mov.c         |   38 +++++++++++++++++++++-----------------
 5 files changed, 54 insertions(+), 41 deletions(-)

diff --git a/libavformat/asfenc.c b/libavformat/asfenc.c
index a523b3a..d2922aa 100644
--- a/libavformat/asfenc.c
+++ b/libavformat/asfenc.c
@@ -764,7 +764,7 @@ static int asf_write_packet(AVFormatContext *s, AVPacket 
*pkt)
     int64_t duration;
     AVCodecContext *codec;
     int64_t packet_st, pts;
-    int start_sec, i;
+    int start_sec, i, err;
     int flags = pkt->flags;
 
     codec  = s->streams[pkt->stream_index]->codec;
@@ -789,9 +789,11 @@ static int asf_write_packet(AVFormatContext *s, AVPacket 
*pkt)
             for (i = asf->nb_index_count; i < start_sec; i++) {
                 if (i >= asf->nb_index_memory_alloc) {
                     asf->nb_index_memory_alloc += ASF_INDEX_BLOCK;
-                    asf->index_ptr              = (ASFIndex 
*)av_realloc(asf->index_ptr,
-                                                                         
sizeof(ASFIndex) *
-                                                                         
asf->nb_index_memory_alloc);
+                   if ((err = av_reallocp_array(&asf->index_ptr, 
asf->nb_index_memory_alloc,
+                                                sizeof(ASFIndex))) < 0) {
+                       asf->nb_index_memory_alloc = 0;
+                       return err;
+                   }
                 }
                 // store
                 asf->index_ptr[i].packet_number = (uint32_t)packet_st;
diff --git a/libavformat/gxfenc.c b/libavformat/gxfenc.c
index 128122f..1bfa385 100644
--- a/libavformat/gxfenc.c
+++ b/libavformat/gxfenc.c
@@ -339,14 +339,15 @@ static int gxf_write_map_packet(AVFormatContext *s, int 
rewrite)
     GXFContext *gxf = s->priv_data;
     AVIOContext *pb = s->pb;
     int64_t pos = avio_tell(pb);
+    int err;
 
     if (!rewrite) {
         if (!(gxf->map_offsets_nb % 30)) {
-            gxf->map_offsets = av_realloc(gxf->map_offsets,
-                                          
(gxf->map_offsets_nb+30)*sizeof(*gxf->map_offsets));
-            if (!gxf->map_offsets) {
+            if ((err = av_reallocp_array(&gxf->map_offsets, 
gxf->map_offsets_nb + 30,
+                                         sizeof(*gxf->map_offsets))) < 0) {
+                gxf->map_offsets_nb = 0;
                 av_log(s, AV_LOG_ERROR, "could not realloc map offsets\n");
-                return -1;
+                return err;
             }
         }
         gxf->map_offsets[gxf->map_offsets_nb++] = pos; // do not increment here
@@ -861,6 +862,7 @@ static int gxf_write_packet(AVFormatContext *s, AVPacket 
*pkt)
     int64_t pos = avio_tell(pb);
     int padding = 0;
     int packet_start_offset = avio_tell(pb) / 1024;
+    int err;
 
     gxf_write_packet_header(pb, PKT_MEDIA);
     if (st->codec->codec_id == AV_CODEC_ID_MPEG2VIDEO && pkt->size % 4) /* 
MPEG-2 frames must be padded */
@@ -873,11 +875,11 @@ static int gxf_write_packet(AVFormatContext *s, AVPacket 
*pkt)
 
     if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
         if (!(gxf->flt_entries_nb % 500)) {
-            gxf->flt_entries = av_realloc(gxf->flt_entries,
-                                          
(gxf->flt_entries_nb+500)*sizeof(*gxf->flt_entries));
-            if (!gxf->flt_entries) {
+            if ((err < av_reallocp_array(&gxf->flt_entries, 
(gxf->flt_entries_nb + 500),
+                                        sizeof(*gxf->flt_entries))) < 0) {
+                gxf->flt_entries_nb = 0;
                 av_log(s, AV_LOG_ERROR, "could not reallocate flt entries\n");
-                return -1;
+                return err;
             }
         }
         gxf->flt_entries[gxf->flt_entries_nb++] = packet_start_offset;
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 9b116b0..00ae407 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -877,16 +877,15 @@ static int ebml_parse_elem(MatroskaDemuxContext *matroska,
     AVIOContext *pb = matroska->ctx->pb;
     uint32_t id = syntax->id;
     uint64_t length;
-    int res;
-    void *newelem;
+    int res, err;
 
     data = (char *)data + syntax->data_offset;
     if (syntax->list_elem_size) {
         EbmlList *list = data;
-        newelem = av_realloc(list->elem, 
(list->nb_elem+1)*syntax->list_elem_size);
-        if (!newelem)
-            return AVERROR(ENOMEM);
-        list->elem = newelem;
+        if ((err = av_reallocp_array(&list->elem, list->nb_elem + 1, 
syntax->list_elem_size)) < 0) {
+            list->nb_elem = 0;
+            return err;
+        }
         data = (char*)list->elem + list->nb_elem*syntax->list_elem_size;
         memset(data, 0, syntax->list_elem_size);
         list->nb_elem++;
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index 67d2350..7fb97a2 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -292,14 +292,17 @@ static mkv_seekhead * mkv_start_seekhead(AVIOContext *pb, 
int64_t segment_offset
 static int mkv_add_seekhead_entry(mkv_seekhead *seekhead, unsigned int 
elementid, uint64_t filepos)
 {
     mkv_seekhead_entry *entries = seekhead->entries;
+    int err;
 
     // don't store more elements than we reserved space for
     if (seekhead->max_entries > 0 && seekhead->max_entries <= 
seekhead->num_entries)
         return -1;
 
-    entries = av_realloc(entries, (seekhead->num_entries + 1) * 
sizeof(mkv_seekhead_entry));
-    if (entries == NULL)
-        return AVERROR(ENOMEM);
+    if ((err = av_reallocp_array(&entries, seekhead->num_entries + 1,
+                                 sizeof(mkv_seekhead_entry))) < 0) {
+        seekhead->num_entries = 0;
+        return err;
+    }
 
     entries[seekhead->num_entries  ].elementid = elementid;
     entries[seekhead->num_entries++].segmentpos = filepos - 
seekhead->segment_offset;
@@ -374,13 +377,16 @@ static mkv_cues * mkv_start_cues(int64_t segment_offset)
 static int mkv_add_cuepoint(mkv_cues *cues, int stream, int64_t ts, int64_t 
cluster_pos)
 {
     mkv_cuepoint *entries = cues->entries;
+    int err;
 
     if (ts < 0)
         return 0;
 
-    entries = av_realloc(entries, (cues->num_entries + 1) * 
sizeof(mkv_cuepoint));
-    if (entries == NULL)
-        return AVERROR(ENOMEM);
+    if ((err = av_reallocp_array(&entries, cues->num_entries + 1,
+                                 sizeof(mkv_cuepoint))) < 0) {
+        cues->num_entries = 0;
+        return err;
+    }
 
     entries[cues->num_entries  ].pts = ts;
     entries[cues->num_entries  ].tracknum = stream + 1;
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 0c938cd..7e19883 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1774,7 +1774,6 @@ static void mov_build_index(MOVContext *mov, AVStream *st)
     unsigned int stps_index = 0;
     unsigned int i, j;
     uint64_t stream_size = 0;
-    AVIndexEntry *mem;
 
     /* adjust first dts according to edit list */
     if (sc->time_offset && mov->time_scale > 0) {
@@ -1808,10 +1807,11 @@ static void mov_build_index(MOVContext *mov, AVStream 
*st)
             return;
         if (sc->sample_count >= UINT_MAX / sizeof(*st->index_entries) - 
st->nb_index_entries)
             return;
-        mem = av_realloc(st->index_entries, (st->nb_index_entries + 
sc->sample_count) * sizeof(*st->index_entries));
-        if (!mem)
+        av_reallocp_array(&st->index_entries, st->nb_index_entries + 
sc->sample_count, sizeof(*st->index_entries));
+        if (!st->index_entries) {
+            st->nb_index_entries = 0;
             return;
-        st->index_entries = mem;
+        }
         st->index_entries_allocated_size = (st->nb_index_entries + 
sc->sample_count) * sizeof(*st->index_entries);
 
         for (i = 0; i < sc->chunk_count; i++) {
@@ -1906,10 +1906,11 @@ static void mov_build_index(MOVContext *mov, AVStream 
*st)
         av_dlog(mov->fc, "chunk count %d\n", total);
         if (total >= UINT_MAX / sizeof(*st->index_entries) - 
st->nb_index_entries)
             return;
-        mem = av_realloc(st->index_entries, (st->nb_index_entries + total) * 
sizeof(*st->index_entries));
-        if (!mem)
+        av_reallocp_array(&st->index_entries, st->nb_index_entries + total, 
sizeof(*st->index_entries));
+        if (!st->index_entries) {
+            st->nb_index_entries = 0;
             return;
-        st->index_entries = mem;
+        }
         st->index_entries_allocated_size = (st->nb_index_entries + total) * 
sizeof(*st->index_entries);
 
         // populate index
@@ -2244,12 +2245,16 @@ static int mov_read_chap(MOVContext *c, AVIOContext 
*pb, MOVAtom atom)
 static int mov_read_trex(MOVContext *c, AVIOContext *pb, MOVAtom atom)
 {
     MOVTrackExt *trex;
+    int err;
 
     if ((uint64_t)c->trex_count+1 >= UINT_MAX / sizeof(*c->trex_data))
         return AVERROR_INVALIDDATA;
-    trex = av_realloc(c->trex_data, (c->trex_count+1)*sizeof(*c->trex_data));
-    if (!trex)
-        return AVERROR(ENOMEM);
+    trex = c->trex_data;
+    if ((err = av_reallocp_array(&trex, c->trex_count + 1,
+                                 sizeof(*c->trex_data))) < 0) {
+        c->trex_count = 0;
+        return err;
+    }
     c->trex_data = trex;
     trex = &c->trex_data[c->trex_count++];
     avio_r8(pb); /* version */
@@ -2272,7 +2277,7 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
     int64_t dts;
     int data_offset = 0;
     unsigned entries, first_sample_flags = frag->flags;
-    int flags, distance, i, found_keyframe = 0;
+    int flags, distance, i, found_keyframe = 0, err;
 
     for (i = 0; i < c->fc->nb_streams; i++) {
         if (c->fc->streams[i]->id == frag->track_id) {
@@ -2310,12 +2315,11 @@ static int mov_read_trun(MOVContext *c, AVIOContext 
*pb, MOVAtom atom)
     }
     if ((uint64_t)entries+sc->ctts_count >= UINT_MAX/sizeof(*sc->ctts_data))
         return AVERROR_INVALIDDATA;
-    ctts_data = av_realloc(sc->ctts_data,
-                           (entries+sc->ctts_count)*sizeof(*sc->ctts_data));
-    if (!ctts_data)
-        return AVERROR(ENOMEM);
-    sc->ctts_data = ctts_data;
-
+    if ((err = av_reallocp_array(&sc->ctts_data, entries + sc->ctts_count,
+                                 sizeof(*sc->ctts_data))) < 0) {
+        sc->ctts_count = 0;
+        return err;
+    }
     if (flags & MOV_TRUN_DATA_OFFSET)        data_offset        = 
avio_rb32(pb);
     if (flags & MOV_TRUN_FIRST_SAMPLE_FLAGS) first_sample_flags = 
avio_rb32(pb);
     dts    = sc->track_end - sc->time_offset;
-- 
1.7.10.4

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to