Merge commit 'd8798276b65543d921adadf63cc7f5ba2d1604af'
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 20 Sep 2013 13:12:21 +0000 (15:12 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 20 Sep 2013 13:14:31 +0000 (15:14 +0200)
* commit 'd8798276b65543d921adadf63cc7f5ba2d1604af':
  r3d: Add more input value validation

Conflicts:
libavformat/r3d.c

See: 99b1b2b1c65969ee324d754ea47e04a0a3f685a8
See: df92ac18528bac4566fc4f5ba4d607c1265791ea
Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/r3d.c

diff --combined libavformat/r3d.c
@@@ -2,20 -2,20 +2,20 @@@
   * R3D REDCODE demuxer
   * Copyright (c) 2008 Baptiste Coudurier <baptiste dot coudurier at gmail dot com>
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * FFmpeg is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * FFmpeg is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
 - * License along with Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -85,10 -85,7 +85,10 @@@ static int r3d_read_red1(AVFormatContex
  
      framerate.num = avio_rb16(s->pb);
      framerate.den = avio_rb16(s->pb);
-     if (framerate.num && framerate.den) {
+     if (framerate.num > 0 && framerate.den > 0) {
 +#if FF_API_R_FRAME_RATE
 +        st->r_frame_rate =
 +#endif
          st->avg_frame_rate = framerate;
      }
  
@@@ -139,7 -136,8 +139,7 @@@ static int r3d_read_rdvo(AVFormatContex
  
      if (st->avg_frame_rate.num)
          st->duration = av_rescale_q(r3d->video_offsets_count,
 -                                    (AVRational){st->avg_frame_rate.den,
 -                                                 st->avg_frame_rate.num},
 +                                    av_inv_q(st->avg_frame_rate),
                                      st->time_base);
      av_dlog(s, "duration %"PRId64"\n", st->duration);
  
@@@ -283,8 -281,8 +283,8 @@@ static int r3d_read_reda(AVFormatContex
      dts = avio_rb32(s->pb);
  
      st->codec->sample_rate = avio_rb32(s->pb);
-     if (st->codec->sample_rate < 0) {
-         av_log(s, AV_LOG_ERROR, "negative sample rate\n");
+     if (st->codec->sample_rate <= 0) {
+         av_log(s, AV_LOG_ERROR, "Bad sample rate\n");
          return AVERROR_INVALIDDATA;
      }
  
  
      pkt->stream_index = 1;
      pkt->dts = dts;
 -    pkt->duration = av_rescale(samples, st->time_base.den, st->codec->sample_rate);
 +    if (st->codec->sample_rate)
 +        pkt->duration = av_rescale(samples, st->time_base.den, st->codec->sample_rate);
      av_dlog(s, "pkt dts %"PRId64" duration %d samples %d sample rate %d\n",
              pkt->dts, pkt->duration, samples, st->codec->sample_rate);
  
@@@ -372,7 -369,7 +372,7 @@@ static int r3d_seek(AVFormatContext *s
          return -1;
  
      frame_num = av_rescale_q(sample_time, st->time_base,
 -                             (AVRational){st->avg_frame_rate.den, st->avg_frame_rate.num});
 +                             av_inv_q(st->avg_frame_rate));
      av_dlog(s, "seek frame num %d timestamp %"PRId64"\n",
              frame_num, sample_time);