Merge commit '48d6556dd46d4f4fac10d0f4a819e314887cd50e'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 12 Sep 2013 09:17:21 +0000 (11:17 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 12 Sep 2013 09:19:38 +0000 (11:19 +0200)
* commit '48d6556dd46d4f4fac10d0f4a819e314887cd50e':
  dsicin: Add some basic sanity checks for fields read from the file

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/dsicin.c

diff --combined libavformat/dsicin.c
@@@ -2,20 -2,20 +2,20 @@@
   * Delphine Software International CIN File Demuxer
   * Copyright (c) 2006 Gregory Montoir (cyx@users.sourceforge.net)
   *
 - * 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
   */
  
@@@ -28,7 -28,6 +28,7 @@@
  #include "libavutil/intreadwrite.h"
  #include "avformat.h"
  #include "internal.h"
 +#include "avio_internal.h"
  
  
  typedef struct CinFileHeader {
@@@ -150,11 -149,13 +150,13 @@@ static int cin_read_frame_header(CinDem
      hdr->video_frame_size = avio_rl32(pb);
      hdr->audio_frame_size = avio_rl32(pb);
  
 -    if (pb->eof_reached || pb->error)
 +    if (url_feof(pb) || pb->error)
          return AVERROR(EIO);
  
      if (avio_rl32(pb) != 0xAA55AA55)
          return AVERROR_INVALIDDATA;
+     if (hdr->video_frame_size < 0 || hdr->audio_frame_size < 0)
+         return AVERROR_INVALIDDATA;
  
      return 0;
  }
@@@ -182,8 -183,6 +184,8 @@@ static int cin_read_packet(AVFormatCont
          /* palette and video packet */
          pkt_size = (palette_type + 3) * hdr->pal_colors_count + hdr->video_frame_size;
  
 +        pkt_size = ffio_limit(pb, pkt_size);
 +
          ret = av_new_packet(pkt, 4 + pkt_size);
          if (ret < 0)
              return ret;