On Fri, 6 Dec 2013, Alexandra Khirnova wrote:

---
libavcodec/bitstream.c            |   11 ++++++++---
libavcodec/eatgv.c                |    6 +++++-
libavcodec/flashsv.c              |   26 ++++++++++++--------------
libavcodec/g2meet.c               |   17 ++++++-----------
libavcodec/h264_mp4toannexb_bsf.c |   21 +++++++++------------
libavcodec/libmp3lame.c           |   10 +++-------
libavcodec/libschroedingerenc.c   |    9 +++++++--
libavcodec/libtheoraenc.c         |   10 +++++-----
libavcodec/libvpxenc.c            |   10 ++++++----
libavcodec/shorten.c              |   27 ++++++++++-----------------
10 files changed, 71 insertions(+), 76 deletions(-)

diff --git a/libavcodec/bitstream.c b/libavcodec/bitstream.c
index e7c476b..8e9f657 100644
--- a/libavcodec/bitstream.c
+++ b/libavcodec/bitstream.c
@@ -106,12 +106,17 @@ static int alloc_table(VLC *vlc, int size, int use_static)

    vlc->table_size += size;
    if (vlc->table_size > vlc->table_allocated) {
+        int err;
        if (use_static)
            return AVERROR_BUG;
        vlc->table_allocated += (1 << vlc->bits);
-        vlc->table = av_realloc(vlc->table, sizeof(VLC_TYPE) * 2 * 
vlc->table_allocated);
-        if (!vlc->table)
-            return AVERROR(ENOMEM);
+        if ((err = av_reallocp(&vlc->table,
+                               sizeof(VLC_TYPE) * 2 *
+                               vlc->table_allocated)) < 0) {
+            vlc->table_allocated = 0;
+            vlc->table_size = 0;
+            return err;
+        }
    }
    return index;
}

This hunk is ok

diff --git a/libavcodec/eatgv.c b/libavcodec/eatgv.c
index 7ab18c5..3bc6506 100644
--- a/libavcodec/eatgv.c
+++ b/libavcodec/eatgv.c
@@ -178,7 +178,11 @@ static int tgv_decode_inter(TgvContext *s, AVFrame *frame,
    }

    if (num_blocks_packed > s->num_blocks_packed) {
-        s->block_codebook = av_realloc(s->block_codebook, 
num_blocks_packed*16);
+        int err;
+        if ((err = av_reallocp(&s->block_codebook, num_blocks_packed * 16)) < 
0) {
+            s->num_blocks_packed = 0;
+            return err;
+        }
        s->num_blocks_packed = num_blocks_packed;
    }


This also looks ok

diff --git a/libavcodec/flashsv.c b/libavcodec/flashsv.c
index a6e8dae..8927d20 100644
--- a/libavcodec/flashsv.c
+++ b/libavcodec/flashsv.c
@@ -296,13 +296,12 @@ static int flashsv_decode_frame(AVCodecContext *avctx, 
void *data,
    /* the block size could change between frames, make sure the buffer
     * is large enough, if not, get a larger one */
    if (s->block_size < s->block_width * s->block_height) {
-        int tmpblock_size = 3 * s->block_width * s->block_height;
+        int tmpblock_size = 3 * s->block_width * s->block_height, err;

-        s->tmpblock = av_realloc(s->tmpblock, tmpblock_size);
-        if (!s->tmpblock) {
+        if ((err = av_reallocp(&s->tmpblock, tmpblock_size)) < 0) {
            av_log(avctx, AV_LOG_ERROR,
                   "Cannot allocate decompression buffer.\n");
-            return AVERROR(ENOMEM);
+            return err;
        }
        if (s->ver == 2) {
            s->deflate_block_size = calc_deflate_block_size(tmpblock_size);
@@ -311,12 +310,9 @@ static int flashsv_decode_frame(AVCodecContext *avctx, 
void *data,
                       "Cannot determine deflate buffer size.\n");
                return -1;
            }
-            s->deflate_block = av_realloc(s->deflate_block,
-                                          s->deflate_block_size);
-            if (!s->deflate_block) {
-                av_log(avctx, AV_LOG_ERROR,
-                       "Cannot allocate deflate buffer.\n");
-                return AVERROR(ENOMEM);
+            if ((err = av_reallocp(&s->deflate_block, s->deflate_block_size)) 
< 0) {
+                av_log(avctx, AV_LOG_ERROR, "Cannot allocate deflate 
buffer.\n");
+                return err;

I think both of these error returns should reset s->block_size to 0, since that is used to check whether the existing arrays are big enough in later calls (and if either realloc failed, the existing arrays were freed).

            }
        }
    }
@@ -340,11 +336,13 @@ static int flashsv_decode_frame(AVCodecContext *avctx, 
void *data,
    /* we care for keyframes only in Screen Video v2 */
    s->is_keyframe = (avpkt->flags & AV_PKT_FLAG_KEY) && (s->ver == 2);
    if (s->is_keyframe) {
-        s->keyframedata = av_realloc(s->keyframedata, avpkt->size);
+        int err;
+        if ((err = av_reallocp(&s->keyframedata, avpkt->size)) < 0)
+            return err;
        memcpy(s->keyframedata, avpkt->data, avpkt->size);
-        s->blocks = av_realloc(s->blocks,
-                               (v_blocks + !!v_part) * (h_blocks + !!h_part) *
-                               sizeof(s->blocks[0]));
+        if ((err = av_reallocp(&s->blocks, (v_blocks + !!v_part) *
+                               (h_blocks + !!h_part) * sizeof(s->blocks[0]))) 
< 0)
+            return err;
    }

    av_dlog(avctx, "image: %dx%d block: %dx%d num: %dx%d part: %dx%d\n",
diff --git a/libavcodec/g2meet.c b/libavcodec/g2meet.c
index 0b4a8b7..1ae87b5 100644
--- a/libavcodec/g2meet.c
+++ b/libavcodec/g2meet.c
@@ -236,16 +236,14 @@ static int jpg_decode_data(JPGContext *c, int width, int 
height,
                           int swapuv)
{
    GetBitContext gb;
-    uint8_t *tmp;
    int mb_w, mb_h, mb_x, mb_y, i, j;
    int bx, by;
    int unesc_size;
    int ret;

-    tmp = av_realloc(c->buf, src_size + FF_INPUT_BUFFER_PADDING_SIZE);
-    if (!tmp)
-        return AVERROR(ENOMEM);
-    c->buf = tmp;
+    if ((ret = av_reallocp(&c->buf,
+                           src_size + FF_INPUT_BUFFER_PADDING_SIZE)) < 0)
+        return ret;
    jpg_unescape(src, src_size, c->buf, &unesc_size);

This is ok but the previous one was just as good IMO.

    memset(c->buf + unesc_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
    init_get_bits(&gb, c->buf, unesc_size * 8);
@@ -478,8 +476,7 @@ static int g2m_load_cursor(AVCodecContext *avctx, 
G2MContext *c,
    uint32_t bits;
    uint32_t cur_size, cursor_w, cursor_h, cursor_stride;
    uint32_t cursor_hot_x, cursor_hot_y;
-    int cursor_fmt;
-    uint8_t *tmp;
+    int cursor_fmt, err;

    cur_size      = bytestream2_get_be32(gb);
    cursor_w      = bytestream2_get_byte(gb);
@@ -514,13 +511,11 @@ static int g2m_load_cursor(AVCodecContext *avctx, 
G2MContext *c,
        return AVERROR_PATCHWELCOME;
    }

-    tmp = av_realloc(c->cursor, cursor_stride * cursor_h);
-    if (!tmp) {
+    if ((err = av_reallocp(&c->cursor, cursor_stride * cursor_h)) < 0) {
        av_log(avctx, AV_LOG_ERROR, "Cannot allocate cursor buffer\n");
-        return AVERROR(ENOMEM);
+        return err;
    }

-    c->cursor        = tmp;
    c->cursor_w      = cursor_w;

This is also ok, as was the previous version.

    c->cursor_h      = cursor_h;
    c->cursor_hot_x  = cursor_hot_x;
diff --git a/libavcodec/h264_mp4toannexb_bsf.c 
b/libavcodec/h264_mp4toannexb_bsf.c
index e86c3e1..3b212e5 100644
--- a/libavcodec/h264_mp4toannexb_bsf.c
+++ b/libavcodec/h264_mp4toannexb_bsf.c
@@ -37,13 +37,14 @@ static int alloc_and_copy(uint8_t **poutbuf, int 
*poutbuf_size,
{
    uint32_t offset         = *poutbuf_size;
    uint8_t nal_header_size = offset ? 3 : 4;
-    void *tmp;
+    int err;

    *poutbuf_size += sps_pps_size + in_size + nal_header_size;
-    tmp = av_realloc(*poutbuf, *poutbuf_size + FF_INPUT_BUFFER_PADDING_SIZE);
-    if (!tmp)
-        return AVERROR(ENOMEM);
-    *poutbuf = tmp;
+    if ((err = av_reallocp(poutbuf,
+                           *poutbuf_size + FF_INPUT_BUFFER_PADDING_SIZE)) < 0) 
{
+        *poutbuf_size = 0;
+        return err;
+    }
    if (sps_pps)
        memcpy(*poutbuf + offset, sps_pps, sps_pps_size);
    memcpy(*poutbuf + sps_pps_size + nal_header_size + offset, in, in_size);

This looks ok

@@ -84,7 +85,7 @@ static int h264_extradata_to_annexb(AVCodecContext *avctx, 
const int padding)
    }

    while (unit_nb--) {
-        void *tmp;
+        int err;

        unit_size   = AV_RB16(extradata);
        total_size += unit_size + 4;
@@ -94,12 +95,8 @@ static int h264_extradata_to_annexb(AVCodecContext *avctx, 
const int padding)
            av_free(out);
            return AVERROR(EINVAL);
        }
-        tmp = av_realloc(out, total_size + padding);
-        if (!tmp) {
-            av_free(out);
-            return AVERROR(ENOMEM);
-        }
-        out = tmp;
+        if ((err = av_reallocp(&out, total_size + padding)) < 0)
+            return err;

Ok

        memcpy(out + total_size - unit_size - 4, nalu_header, 4);
        memcpy(out + total_size - unit_size, extradata + 2, unit_size);
        extradata += 2 + unit_size;
diff --git a/libavcodec/libmp3lame.c b/libavcodec/libmp3lame.c
index ce0e9c8..ee76ff8 100644
--- a/libavcodec/libmp3lame.c
+++ b/libavcodec/libmp3lame.c
@@ -57,18 +57,14 @@ typedef struct LAMEContext {
static int realloc_buffer(LAMEContext *s)
{
    if (!s->buffer || s->buffer_size - s->buffer_index < BUFFER_SIZE) {
-        uint8_t *tmp;
-        int new_size = s->buffer_index + 2 * BUFFER_SIZE;
+        int new_size = s->buffer_index + 2 * BUFFER_SIZE, err;

        av_dlog(s->avctx, "resizing output buffer: %d -> %d\n", s->buffer_size,
                new_size);
-        tmp = av_realloc(s->buffer, new_size);
-        if (!tmp) {
-            av_freep(&s->buffer);
+        if ((err = av_reallocp(&s->buffer, new_size)) < 0) {
            s->buffer_size = s->buffer_index = 0;
-            return AVERROR(ENOMEM);
+            return err;
        }
-        s->buffer      = tmp;
        s->buffer_size = new_size;
    }

This is ok (and is equivalent to what was there before, so here it's a clear simplification).

    return 0;
diff --git a/libavcodec/libschroedingerenc.c b/libavcodec/libschroedingerenc.c
index 11cc0eb..c2aac53 100644
--- a/libavcodec/libschroedingerenc.c
+++ b/libavcodec/libschroedingerenc.c
@@ -295,6 +295,7 @@ static int libschroedinger_encode_frame(AVCodecContext 
*avctx, AVPacket *pkt,

    /* Now check to see if we have any output from the encoder. */
    while (go) {
+        int err;
        SchroStateEnum state;
        state = schro_encoder_wait(encoder);
        switch (state) {
@@ -309,8 +310,12 @@ static int libschroedinger_encode_frame(AVCodecContext 
*avctx, AVPacket *pkt,
             * be able to set the pts correctly. So we don't write data
             * to the frame output queue until we actually have a frame
             */
-            p_schro_params->enc_buf = av_realloc(p_schro_params->enc_buf,
-                                                 p_schro_params->enc_buf_size + 
enc_buf->length);
+            if ((err = av_reallocp(&p_schro_params->enc_buf,
+                                   p_schro_params->enc_buf_size +
+                                   enc_buf->length)) < 0) {
+                p_schro_params->enc_buf_size = 0;
+                return err;
+            }

Probably ok


            memcpy(p_schro_params->enc_buf + p_schro_params->enc_buf_size,
                   enc_buf->data, enc_buf->length);
diff --git a/libavcodec/libtheoraenc.c b/libavcodec/libtheoraenc.c
index 9041a27..75b0a16 100644
--- a/libavcodec/libtheoraenc.c
+++ b/libavcodec/libtheoraenc.c
@@ -58,8 +58,8 @@ static int concatenate_packet(unsigned int* offset,
                              const ogg_packet* packet)
{
    const char* message = NULL;
-    uint8_t* newdata    = NULL;
    int newsize = avc_context->extradata_size + 2 + packet->bytes;
+    int err = AVERROR_INVALIDDATA;

    if (packet->bytes < 0) {
        message = "ogg_packet has negative size";
@@ -68,16 +68,16 @@ static int concatenate_packet(unsigned int* offset,
    } else if (newsize < avc_context->extradata_size) {
        message = "extradata_size would overflow";
    } else {
-        newdata = av_realloc(avc_context->extradata, newsize);
-        if (!newdata)
+        if ((err = av_reallocp(&avc_context->extradata, newsize)) < 0) {
+            avc_context->extradata_size = 0;
            message = "av_realloc failed";
+        }
    }
    if (message) {
        av_log(avc_context, AV_LOG_ERROR, "concatenate_packet failed: %s\n", 
message);
-        return -1;
+        return err;
    }

-    avc_context->extradata      = newdata;

Ok

    avc_context->extradata_size = newsize;
    AV_WB16(avc_context->extradata + (*offset), packet->bytes);
    *offset += 2;
diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c
index 9996afc..1945a35 100644
--- a/libavcodec/libvpxenc.c
+++ b/libavcodec/libvpxenc.c
@@ -467,11 +467,13 @@ static int queue_frames(AVCodecContext *avctx, AVPacket 
*pkt_out,
            break;
        case VPX_CODEC_STATS_PKT: {
            struct vpx_fixed_buf *stats = &ctx->twopass_stats;
-            stats->buf = av_realloc(stats->buf,
-                                    stats->sz + pkt->data.twopass_stats.sz);
-            if (!stats->buf) {
+            int err;
+            if ((err = av_reallocp(&stats->buf,
+                                   stats->sz +
+                                   pkt->data.twopass_stats.sz)) < 0) {
+                stats->sz = 0;
                av_log(avctx, AV_LOG_ERROR, "Stat buffer realloc failed\n");
-                return AVERROR(ENOMEM);
+                return err;
            }

Probably ok

            memcpy((uint8_t*)stats->buf + stats->sz,
                   pkt->data.twopass_stats.buf, pkt->data.twopass_stats.sz);
diff --git a/libavcodec/shorten.c b/libavcodec/shorten.c
index 31251ac..992e01b 100644
--- a/libavcodec/shorten.c
+++ b/libavcodec/shorten.c
@@ -119,9 +119,7 @@ static av_cold int shorten_decode_init(AVCodecContext 
*avctx)

static int allocate_buffers(ShortenContext *s)
{
-    int i, chan;
-    int *coeffs;
-    void *tmp_ptr;
+    int i, chan, err;

    for (chan = 0; chan < s->channels; chan++) {
        if (FFMAX(1, s->nmean) >= UINT_MAX / sizeof(int32_t)) {
@@ -135,26 +133,21 @@ static int allocate_buffers(ShortenContext *s)
            return AVERROR_INVALIDDATA;
        }

-        tmp_ptr =
-            av_realloc(s->offset[chan], sizeof(int32_t) * FFMAX(1, s->nmean));
-        if (!tmp_ptr)
-            return AVERROR(ENOMEM);
-        s->offset[chan] = tmp_ptr;
+        if ((err = av_reallocp(&s->offset[chan],
+                               sizeof(int32_t) *
+                               FFMAX(1, s->nmean))) < 0)
+            return err;

-        tmp_ptr = av_realloc(s->decoded_base[chan], (s->blocksize + s->nwrap) *
-                             sizeof(s->decoded_base[0][0]));
-        if (!tmp_ptr)
-            return AVERROR(ENOMEM);
-        s->decoded_base[chan] = tmp_ptr;
+        if ((err = av_reallocp(&s->decoded_base[chan], (s->blocksize + 
s->nwrap) *
+                               sizeof(s->decoded_base[0][0]))) < 0)
+            return err;
        for (i = 0; i < s->nwrap; i++)
            s->decoded_base[chan][i] = 0;
        s->decoded[chan] = s->decoded_base[chan] + s->nwrap;
    }

-    coeffs = av_realloc(s->coeffs, s->nwrap * sizeof(*s->coeffs));
-    if (!coeffs)
-        return AVERROR(ENOMEM);
-    s->coeffs = coeffs;
+    if ((err = av_reallocp(&s->coeffs, s->nwrap * sizeof(*s->coeffs))) < 0)
+        return err;

    return 0;
}
--
1.7.10.4

This part is probably ok as well


Since there's only one small detail to fix, I can probably do it myself and push instead of having to do yet another iteration - thus, pushed.

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

Reply via email to