Merge remote-tracking branch 'qatar/release/9' into release/1.1
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 26 Feb 2013 02:04:03 +0000 (03:04 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 26 Feb 2013 02:09:41 +0000 (03:09 +0100)
* qatar/release/9:
  doc: developer: Allow tabs in the vim configuration for Automake files
  doc: filters: Correct BNF FILTER description
  Prepare for 9.3 Release
  update Changelog
  cavs: initialize various context tables to 0
  4xm: check the return value of read_huffman_tables().
  qtrle: add more checks against pixel_ptr being negative.
  mlpdec: do not try to allocate a zero-sized output buffer.
  av_memcpy_backptr: avoid an infinite loop for back = 0
  flicvideo: avoid an infinite loop in byte run compression
  lagarith: avoid infinite loop in lag_rac_refill()
  mov: use the format context for logging.
  loco: check that there is data left after decoding a plane.
  update Changelog
  x86: h264: Don't use redzone in AVX h264_deblock on Win64

Conflicts:
Changelog
RELEASE
libavcodec/4xm.c
libavcodec/loco.c
libavcodec/qtrle.c
libavutil/mem.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
Changelog
doc/developer.texi
doc/filters.texi
libavcodec/4xm.c
libavcodec/flicvideo.c
libavcodec/lagarithrac.h
libavcodec/loco.c
libavcodec/mlpdec.c
libavcodec/qtrle.c
libavformat/mov.c

diff --cc Changelog
+++ b/Changelog
  Entries are sorted chronologically from oldest to youngest within each release,
  releases are sorted from youngest to oldest.
  
 -version 9.2:
 +version <next>:
+ - loco: check that there is data left after decoding a plane.
+ - mov: use the format context for logging.
+ - lagarith: avoid infinite loop in lag_rac_refill() with corrupted files
+ - flicvideo: avoid an infinite loop in byte run compression
+ - av_memcpy_backptr: avoid an infinite loop for back = 0
+ - mlpdec: do not try to allocate a zero-sized output buffer.
+ - qtrle: add more checks against pixel_ptr being negative.
+ - 4xm: check the return value of read_huffman_tables().
+ - cavs: initialize various context tables, avoids crashes with corrupted files
+ - x86/H.264: Don't use redzone in AVX h264_deblock on Win64
+ - VQA video: check chunk sizes before reading chunks
+ - RoQ video decoder: check dimensions validity
+ - QDM2: check array index before use, fix out of array accesses
+ - mpegvideo: Do REBASE_PICTURE with byte pointers
+ - SVQ3: unbreak decoding
+ - libopencore-amrwb: Make AMR-WB ifdeffery more precise
+ - libopencore-amr: Conditionally compile decoder and encoder bits
+ - arm: Fall back to runtime cpu feature detection via /proc/cpuinfo
+ - xxan: properly handle odd heights
+ - msrledec: check bounds before constructing a possibly invalid pointer,
+ - qtrle: fix the topmost line for 1bit
+ - aasc: fix output for msrle compression
+ - yop: check for input overreads
+ - yop: check that extradata is large enough
+ - fraps: fix off-by one bug for version 1
+ - vf_delogo: fix copying the input frame
+ - vf_delogo: fix an uninitialized read
+ - dnxhdenc: fix invalid reads in dnxhd_mb_var_thread()
+ - ATRAC3: use correct loop variable in add_tonal_components()
+ - MLP: store the channel layout for each substream
+ - MLP decoder: TrueHD: use Libav channel order
+ - x86: ac3: Fix HAVE_MMXEXT condition to only refer to external assembly
+ - arm: vp8: Fix the plain-armv6 version of vp8_luma_dc_wht
+ - lavr: call mix_function_init() in ff_audio_mix_set_matrix()
+ - rtpenc_chain: Use the original AVFormatContext for getting payload type
+ - rtp: Make sure the output format pointer is set
+ - rtp: Make sure priv_data is set before reading it
+ - videodsp_armv5te: remove #if HAVE_ARMV5TE_EXTERNAL
+ - get_bits: change the failure condition in init_get_bits
+ - mpegvideo: fix loop condition in draw_line()
+ - fate: update ref after rv30_loop_filter fix
+ - RV30: fix masking in rv30_loop_filter()
+ - libcdio: support recent cdio-paranoia
+ - Theora: Skip zero-sized headers
+ - H.264: add 3 pixels below for subpixel filter wait position
+ - H.264: fix ff_generate_sliding_window_mmcos() prototype
+ - H.264: don't clobber mmco opcode tables for non-first slice headers
+ - libx264: use the library specific default rc_initial_buffer_occupancy
+ - lavc: set the default rc_initial_buffer_occupancy
+ - lavc: introduce the convenience function init_get_bits8
+ - lavc: check for overflow in init_get_bits
+ - configure: enable pic for shared libs on AArch64
+ - zmbv: Reset the decoder on keyframe errors
+ - VC1 decoder: prevent a crash due missing pred_flag parameter
+ - matroska: Fix use after free
+ - VP3: Fix double free in vp3_decode_end()
 -
 -
 -version 9.1:
  - Fix a crash on windows platforms related to automatic stack alignment
    in libavresample
- - Fix memleaks in the ogg demuxer. Related to CVE-2012-2882
+ - Fix memleaks in the Ogg demuxer. Related to CVE-2012-2882
  
  
 -version 9:
 -- av_basename and av_dirname
 -- adobe and limelight publisher authentication in RTMP
 +version 1.1:
  
 -
 -version 9_beta3:
 -- ashowinfo audio filter
 +- stream disposition information printing in ffprobe
 +- filter for loudness analysis following EBU R128
 +- Opus encoder using libopus
 +- ffprobe -select_streams option
 +- Pinnacle TARGA CineWave YUV16 decoder
 +- TAK demuxer, decoder and parser
 +- DTS-HD demuxer
 +- remove -same_quant, it hasn't worked for years
 +- FFM2 support
 +- X-Face image encoder and decoder
  - 24-bit FLAC encoding
 -- audio volume filter
 -- deprecated the avconv -vol option. the volume filter is to be used instead.
  - multi-channel ALAC encoding up to 7.1
 -- TAK demuxer, parser, and decoder
 -- adaptive frame-level multithreading for H.264
 -
 -
 -version 9_beta2:
  - metadata (INFO tag) support in WAV muxer
 +- subtitles raw text decoder
  - support for building DLLs using MSVC
 -- remove avserver daemon mode
 +- LVF demuxer
 +- ffescape tool
 +- metadata (info chunk) support in CAF muxer
 +- field filter ported from libmpcodecs
 +- AVR demuxer
 +- geq filter ported from libmpcodecs
 +- remove ffserver daemon mode
 +- AST muxer/demuxer
 +- new expansion syntax for drawtext
 +- BRender PIX image decoder
 +- ffprobe -show_entries option
 +- ffprobe -sections option
 +- ADPCM IMA Dialogic decoder
 +- BRSTM demuxer
 +- animated GIF decoder and demuxer
 +- PVF demuxer
 +- subtitles filter
 +- IRCAM muxer/demuxer
 +- Paris Audio File demuxer
 +- Virtual concatenation demuxer
 +- VobSub demuxer
 +- JSON captions for TED talks decoding support
 +- SOX Resampler support in libswresample
 +- aselect filter
 +- SGI RLE 8-bit decoder
 +- Silicon Graphics Motion Video Compressor 1 & 2 decoder
 +- Silicon Graphics Movie demuxer
 +- apad filter
 +- Resolution & pixel format change support with multithreading for H.264
 +- documentation split into per-component manuals
 +- pp (postproc) filter ported from MPlayer
 +- NIST Sphere demuxer
 +- MPL2, VPlayer, MPlayer, AQTitle, PJS and SubViewer v1 subtitles demuxers and decoders
 +- Sony Wave64 muxer
 +- adobe and limelight publisher authentication in RTMP
 +- data: URI scheme
  - support building on the Plan 9 operating system
 -- ffv1: support version 1.3
 +- kerndeint filter ported from MPlayer
 +- histeq filter ported from VirtualDub
 +- Megalux Frame demuxer
 +- 012v decoder
 +- Improved AVC Intra decoding support
  
  
 -version 9_beta1:
 +version 1.0:
  
 -- XWD encoder and decoder
 -- Support for fragmentation in the mov/mp4 muxer
 -- ISMV (Smooth Streaming) muxer
 -- CDXL demuxer and decoder
 -- Apple ProRes encoder
 -- Sun Rasterfile Encoder
 -- remove libpostproc
 -- ID3v2 attached pictures reading and writing
 -- WMA Lossless decoder
 -- XBM encoder
 -- RealAudio Lossless decoder
 -- ZeroCodec decoder
 -- drop support for avconv without libavfilter
 -- add libavresample audio conversion library
 -- audio filters support in libavfilter and avconv
 -- add fps filter
 -- audio split filter
 -- audio mix filter
 -- avprobe output is now standard INI or JSON. The old format can still
 -  be used with -of old.
 +- INI and flat output in ffprobe
 +- Scene detection in libavfilter
  - Indeo Audio decoder
  - channelsplit audio filter
 +- setnsamples audio filter
 +- atempo filter
 +- ffprobe -show_data option
  - RTMPT protocol support
  - iLBC encoding/decoding via libilbc
  - Microsoft Screen 1 decoder
Simple merge
Simple merge
@@@ -748,9 -719,11 +748,11 @@@ static int decode_i_frame(FourXContext 
          return -1;
      }
  
 -    prestream = read_huffman_tables(f, prestream);
 +    prestream = read_huffman_tables(f, prestream, buf + length - prestream);
-     if (!prestream)
-         return -1;
+     if (!prestream) {
+         av_log(f->avctx, AV_LOG_ERROR, "Error reading Huffman tables.\n");
+         return AVERROR_INVALIDDATA;
+     }
  
      init_get_bits(&f->gb, buf + 4, 8 * bitstream_size);
  
@@@ -384,9 -347,12 +384,14 @@@ static int flic_decode_frame_8BPP(AVCod
                   bytestream2_skip(&g2, 1);
                  pixel_countdown = s->avctx->width;
                  while (pixel_countdown > 0) {
 +                    if (bytestream2_tell(&g2) + 1 > stream_ptr_after_chunk)
 +                        break;
                      byte_run = sign_extend(bytestream2_get_byte(&g2), 8);
+                     if (!byte_run) {
+                         av_log(avctx, AV_LOG_ERROR, "Invalid byte run value.\n");
+                         return AVERROR_INVALIDDATA;
+                     }
                      if (byte_run > 0) {
                          palette_idx1 = bytestream2_get_byte(&g2);
                          CHECK_PIXEL_PTR(byte_run);
Simple merge
@@@ -180,10 -177,6 +180,10 @@@ static int decode_frame(AVCodecContext 
      }
      p->key_frame = 1;
  
-     if (decoded < 0) goto stop; \
 +#define ADVANCE_BY_DECODED do { \
++    if (decoded < 0 || decoded >= buf_size) goto buf_too_small; \
 +    buf += decoded; buf_size -= decoded; \
 +} while(0)
      switch(l->mode) {
      case LOCO_CYUY2: case LOCO_YUY2: case LOCO_UYVY:
          decoded = loco_decode_plane(l, p->data[0], avctx->width, avctx->height,
          decoded = loco_decode_plane(l, p->data[0] + p->linesize[0]*(avctx->height-1) + 2, avctx->width, avctx->height,
                                      -p->linesize[0], buf, buf_size, 3);
          break;
-     case LOCO_CRGBA: case LOCO_RGBA:
++    case LOCO_CRGBA:
+     case LOCO_RGBA:
 -        decoded = loco_decode_plane(l, p->data[0], avctx->width, avctx->height,
 -                                    p->linesize[0], buf, buf_size, 4);
 -        if (decoded >= buf_size)
 -            goto buf_too_small;
 -        buf += decoded; buf_size -= decoded;
 -
 -        decoded = loco_decode_plane(l, p->data[0] + 1, avctx->width, avctx->height,
 -                                    p->linesize[0], buf, buf_size, 4);
 -        if (decoded >= buf_size)
 -            goto buf_too_small;
 -        buf += decoded; buf_size -= decoded;
 -
 -        decoded = loco_decode_plane(l, p->data[0] + 2, avctx->width, avctx->height,
 -                                    p->linesize[0], buf, buf_size, 4);
 -        if (decoded >= buf_size)
 -            goto buf_too_small;
 -        buf += decoded; buf_size -= decoded;
 -
 -        decoded = loco_decode_plane(l, p->data[0] + 3, avctx->width, avctx->height,
 -                                    p->linesize[0], buf, buf_size, 4);
 +        decoded = loco_decode_plane(l, p->data[0] + p->linesize[0]*(avctx->height-1), avctx->width, avctx->height,
 +                                    -p->linesize[0], buf, buf_size, 4);
 +        ADVANCE_BY_DECODED;
 +        decoded = loco_decode_plane(l, p->data[0] + p->linesize[0]*(avctx->height-1) + 1, avctx->width, avctx->height,
 +                                    -p->linesize[0], buf, buf_size, 4);
 +        ADVANCE_BY_DECODED;
 +        decoded = loco_decode_plane(l, p->data[0] + p->linesize[0]*(avctx->height-1) + 2, avctx->width, avctx->height,
 +                                    -p->linesize[0], buf, buf_size, 4);
 +        ADVANCE_BY_DECODED;
 +        decoded = loco_decode_plane(l, p->data[0] + p->linesize[0]*(avctx->height-1) + 3, avctx->width, avctx->height,
 +                                    -p->linesize[0], buf, buf_size, 4);
          break;
      }
- stop:
  
      *got_frame      = 1;
      *(AVFrame*)data = l->pic;
  
 -    return buf_size;
 +    return buf_size < 0 ? -1 : avpkt->size - buf_size;
+ buf_too_small:
+     av_log(avctx, AV_LOG_ERROR, "Input data too small.\n");
+     return AVERROR(EINVAL);
  }
  
--static av_cold int decode_init(AVCodecContext *avctx){
++static av_cold int decode_init(AVCodecContext *avctx)
++{
      LOCOContext * const l = avctx->priv_data;
      int version;
  
Simple merge
Simple merge
Simple merge