Mercurial > libavcodec.hg
changeset 10258:6829e70ef3aa libavcodec
Make sure that all memory allocations succeed.
Based on 28_theora_malloc_checks.patch from the Google Chrome team.
author | melanson |
---|---|
date | Thu, 24 Sep 2009 06:33:16 +0000 |
parents | af449680f6ee |
children | 21add4db7e53 |
files | vp3.c |
diffstat | 1 files changed, 12 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/vp3.c Thu Sep 24 05:24:46 2009 +0000 +++ b/vp3.c Thu Sep 24 06:33:16 2009 +0000 @@ -42,6 +42,8 @@ #define FRAGMENT_PIXELS 8 +static av_cold int vp3_decode_end(AVCodecContext *avctx); + typedef struct Coeff { struct Coeff *next; DCTELEM coeff; @@ -1755,6 +1757,11 @@ s->coeffs = av_malloc(s->fragment_count * sizeof(Coeff) * 65); s->coded_fragment_list = av_malloc(s->fragment_count * sizeof(int)); s->pixel_addresses_initialized = 0; + if (!s->superblock_coding || !s->all_fragments || !s->coeff_counts || + !s->coeffs || !s->coded_fragment_list) { + vp3_decode_end(avctx); + return -1; + } if (!s->theora_tables) { @@ -1860,6 +1867,11 @@ s->superblock_macroblocks = av_malloc(s->superblock_count * 4 * sizeof(int)); s->macroblock_fragments = av_malloc(s->macroblock_count * 6 * sizeof(int)); s->macroblock_coding = av_malloc(s->macroblock_count + 1); + if (!s->superblock_fragments || !s->superblock_macroblocks || + !s->macroblock_fragments || !s->macroblock_coding) { + vp3_decode_end(avctx); + return -1; + } init_block_mapping(s); for (i = 0; i < 3; i++) {