On Mon, Nov 17, 2014 at 12:22 AM, Vittorio Giovara <[email protected]> wrote: > From: Luca Barbato <[email protected]> > > CC: [email protected] > Bug-Id: CID 1087092 > --- > libavformat/xwma.c | 25 ++++++++++++++++--------- > 1 file changed, 16 insertions(+), 9 deletions(-) > > diff --git a/libavformat/xwma.c b/libavformat/xwma.c > index 45d74de..0af4182 100644 > --- a/libavformat/xwma.c > +++ b/libavformat/xwma.c > @@ -44,9 +44,9 @@ static int xwma_probe(AVProbeData *p) > static int xwma_read_header(AVFormatContext *s) > { > int64_t size; > - int ret; > + int ret = 0; > uint32_t dpds_table_size = 0; > - uint32_t *dpds_table = 0; > + uint32_t *dpds_table = NULL; > unsigned int tag; > AVIOContext *pb = s->pb; > AVStream *st; > @@ -130,8 +130,10 @@ static int xwma_read_header(AVFormatContext *s) > > /* parse the remaining RIFF chunks */ > for (;;) { > - if (pb->eof_reached) > - return -1; > + if (pb->eof_reached) { > + ret = AVERROR_INVALIDDATA; > + goto fail; > + } > /* read next chunk tag */ > tag = avio_rl32(pb); > size = avio_rl32(pb); > @@ -152,7 +154,8 @@ static int xwma_read_header(AVFormatContext *s) > /* Error out if there is more than one dpds chunk. */ > if (dpds_table) { > av_log(s, AV_LOG_ERROR, "two dpds chunks present\n"); > - return -1; > + ret = AVERROR_INVALIDDATA; > + goto fail; > } > > /* Compute the number of entries in the dpds chunk. */ > @@ -184,8 +187,10 @@ static int xwma_read_header(AVFormatContext *s) > } > > /* Determine overall data length */ > - if (size < 0) > - return -1; > + if (size < 0) { > + ret = AVERROR_INVALIDDATA; > + goto fail; > + } > if (!size) { > xwma->data_end = INT64_MAX; > } else > @@ -204,7 +209,8 @@ static int xwma_read_header(AVFormatContext *s) > av_log(s, AV_LOG_ERROR, > "Invalid bits_per_coded_sample %d for %d channels\n", > st->codec->bits_per_coded_sample, st->codec->channels); > - return AVERROR_INVALIDDATA; > + ret = AVERROR_INVALIDDATA; > + goto fail; > } > > st->duration = total_decoded_bytes / bytes_per_sample; > @@ -239,9 +245,10 @@ static int xwma_read_header(AVFormatContext *s) > st->duration = (size<<3) * st->codec->sample_rate / > st->codec->bit_rate; > } > > +fail: > av_free(dpds_table); > > - return 0; > + return ret; > } > > static int xwma_read_packet(AVFormatContext *s, AVPacket *pkt) > -- > 1.9.3 (Apple Git-50) >
ping -- Vittorio _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
