Browse code

Merge remote-tracking branch 'qatar/release/0.7' into release/0.8

This merge is primary for metadata, theres little actually changed
except cosmetics

* qatar/release/0.7:
4xm: Add a check in decode_i_frame to prevent buffer overreads
wma: initialize prev_block_len_bits, next_block_len_bits, and block_len_bits.
Update RELEASE file for 0.7.3
swscale: #include "libavutil/mathematics.h"
vp3dec: Check coefficient index in vp3_dequant()
svq1dec: call avcodec_set_dimensions() after dimensions changed.
swscale: Readd #define _SVID_SOURCE

Conflicts:
RELEASE
libavcodec/4xm.c
libavcodec/vp3.c
libswscale/utils.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>

Michael Niedermayer authored on 2011/12/24 09:19:33
Showing 4 changed files
... ...
@@ -694,10 +694,13 @@ static int decode_i_frame(FourXContext *f, const uint8_t *buf, int length){
694 694
     unsigned int prestream_size;
695 695
     const uint8_t *prestream;
696 696
 
697
-    if (bitstream_size > (1<<26) || length < bitstream_size + 12)
698
-        return -1;
699
-    prestream_size = 4*AV_RL32(buf + bitstream_size + 4);
700
-    prestream = buf + bitstream_size + 12;
697
+    if (length < bitstream_size + 12) {
698
+        av_log(f->avctx, AV_LOG_ERROR, "packet size too small\n");
699
+        return AVERROR_INVALIDDATA;
700
+    }
701
+
702
+    prestream_size = 4 * AV_RL32(buf + bitstream_size + 4);
703
+    prestream      = buf + bitstream_size + 12;
701 704
 
702 705
     if (prestream_size > (1<<26) ||
703 706
         prestream_size != length - (bitstream_size + 12)){
... ...
@@ -1514,7 +1514,10 @@ static void render_slice(Vp3DecodeContext *s, int slice)
1514 1514
                     /* invert DCT and place (or add) in final output */
1515 1515
 
1516 1516
                     if (s->all_fragments[i].coding_method == MODE_INTRA) {
1517
-                        vp3_dequant(s, s->all_fragments + i, plane, 0, block);
1517
+                        int index;
1518
+                        index = vp3_dequant(s, s->all_fragments + i, plane, 0, block);
1519
+                        if (index > 63)
1520
+                            continue;
1518 1521
                         if(s->avctx->idct_algo!=FF_IDCT_VP3)
1519 1522
                             block[0] += 128<<3;
1520 1523
                         s->dsp.idct_put(
... ...
@@ -1522,7 +1525,10 @@ static void render_slice(Vp3DecodeContext *s, int slice)
1522 1522
                             stride,
1523 1523
                             block);
1524 1524
                     } else {
1525
-                        if (vp3_dequant(s, s->all_fragments + i, plane, 1, block)) {
1525
+                        int index = vp3_dequant(s, s->all_fragments + i, plane, 1, block);
1526
+                        if (index > 63)
1527
+                            continue;
1528
+                        if (index > 0) {
1526 1529
                         s->dsp.idct_add(
1527 1530
                             output_plane + first_pixel,
1528 1531
                             stride,
... ...
@@ -137,6 +137,9 @@ int ff_wma_init(AVCodecContext *avctx, int flags2)
137 137
 
138 138
     /* compute MDCT block size */
139 139
     s->frame_len_bits = ff_wma_get_frame_len_bits(s->sample_rate, s->version, 0);
140
+    s->next_block_len_bits = s->frame_len_bits;
141
+    s->prev_block_len_bits = s->frame_len_bits;
142
+    s->block_len_bits      = s->frame_len_bits;
140 143
 
141 144
     s->frame_len = 1 << s->frame_len_bits;
142 145
     if (s->use_variable_block_len) {
... ...
@@ -44,6 +44,7 @@
44 44
 #include "libavutil/cpu.h"
45 45
 #include "libavutil/avutil.h"
46 46
 #include "libavutil/bswap.h"
47
+#include "libavutil/mathematics.h"
47 48
 #include "libavutil/opt.h"
48 49
 #include "libavutil/pixdesc.h"
49 50