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

Reply via email to