[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#780472: unblock: libav/6:11.3-1



On 2015-03-14 16:37:12, Sebastian Ramacher wrote:
> Package: release.debian.org
> Severity: normal
> User: release.debian.org@packages.debian.org
> Usertags: unblock
> 
> Please unblock package libav. It is a new stable point release including fixes
> for CVE
> 
> The full debdiff is attached and the changelog is as follows:

Really attached this time.

Cheers
-- 
Sebastian Ramacher
diff -Nru libav-11.2/Changelog libav-11.3/Changelog
--- libav-11.2/Changelog	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/Changelog	2015-03-09 02:54:09.000000000 +0100
@@ -1,6 +1,31 @@
 Entries are sorted chronologically from oldest to youngest within each release,
 releases are sorted from youngest to oldest.
 
+version 11.3:
+
+- utvideodec: Handle slice_height being zero (CVE-2014-9604)
+- adxdec: set avctx->channels in adx_read_header
+- rmenc: limit packet size
+- webp: validate the distance prefix code
+- rv10: check size of s->mb_width * s->mb_height
+- eamad: check for out of bounds read (CID/1257500)
+- mdec: check for out of bounds read (CID/1257501)
+- configure: Properly fail when libcdio/cdparanoia is not found
+- tiff: Check that there is no aliasing in pixel format selection (CVE-2014-8544)
+- aic: Fix decoding files with odd dimensions
+- vorbis: Check the vlc value in setup_classifs
+- arm: Suppress tags about used cpu arch and extensions
+- prores: Extend the padding check to 16bit
+- icecast: Do not use chunked post, allows feeding to icecast properly
+- img2dec: correctly use the parsed value from -start_number
+- h264_cabac: Break infinite loops
+- hevc_deblock: Fix compilation with nasm (libav #795)
+- h264: initialize H264Context.avctx in init_thread_copy
+- h264: Do not share rbsp_buffer across threads
+- h264: only ref cur_pic in update_thread_context if it is initialized
+- matroskadec: Fix read-after-free in matroska_read_seek() (chromium #427266)
+- log: Unbreak no-tty support on 256color terminals
+
 version 11.2:
 
 - h264: restore a block mistakenly removed in e10fd08a (libav #781)
diff -Nru libav-11.2/configure libav-11.3/configure
--- libav-11.2/configure	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/configure	2015-03-09 02:54:09.000000000 +0100
@@ -1477,6 +1477,7 @@
 TOOLCHAIN_FEATURES="
     as_dn_directive
     as_func
+    as_object_arch
     asm_mod_q
     attribute_may_alias
     attribute_packed
@@ -3870,6 +3871,11 @@
 .unreq ra
 EOF
 
+    # llvm's integrated assembler supports .object_arch from llvm 3.5
+    [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
+.object_arch armv4
+EOF
+
     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
 
 elif enabled mips; then
@@ -4242,7 +4248,8 @@
 
 if enabled libcdio; then
     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
-    check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio
+    check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
+    die "ERROR: No usable libcdio/cdparanoia found"
 fi
 
 check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib
diff -Nru libav-11.2/debian/changelog libav-11.3/debian/changelog
--- libav-11.2/debian/changelog	2015-01-17 20:58:13.000000000 +0100
+++ libav-11.3/debian/changelog	2015-03-13 23:27:29.000000000 +0100
@@ -1,3 +1,31 @@
+libav (6:11.3-1) unstable; urgency=medium
+
+  * New upstream release fixing multiple security issues.
+    - utvideodec: Handle slice_height being zero (CVE-2014-9604)
+    - adxdec: set avctx->channels in adx_read_header
+    - rmenc: limit packet size
+    - webp: validate the distance prefix code
+    - rv10: check size of s->mb_width * s->mb_height
+    - eamad: check for out of bounds read (CID/1257500)
+    - mdec: check for out of bounds read (CID/1257501)
+    - configure: Properly fail when libcdio/cdparanoia is not found
+    - tiff: Check that there is no aliasing in pixel format selection (CVE-2014-8544)
+    - aic: Fix decoding files with odd dimensions
+    - vorbis: Check the vlc value in setup_classifs
+    - arm: Suppress tags about used cpu arch and extensions
+    - prores: Extend the padding check to 16bit
+    - icecast: Do not use chunked post, allows feeding to icecast properly
+    - img2dec: correctly use the parsed value from -start_number
+    - h264_cabac: Break infinite loops
+    - hevc_deblock: Fix compilation with nasm (libav #795)
+    - h264: initialize H264Context.avctx in init_thread_copy
+    - h264: Do not share rbsp_buffer across threads
+    - h264: only ref cur_pic in update_thread_context if it is initialized
+    - matroskadec: Fix read-after-free in matroska_read_seek() (chromium #427266)
+    - log: Unbreak no-tty support on 256color terminals
+
+ -- Sebastian Ramacher <sramacher@debian.org>  Fri, 13 Mar 2015 23:27:25 +0100
+
 libav (6:11.2-1) unstable; urgency=medium
 
   * New upstream release fixing multiple security issues. (Closes: #773626)
diff -Nru libav-11.2/libavcodec/aic.c libav-11.3/libavcodec/aic.c
--- libav-11.2/libavcodec/aic.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavcodec/aic.c	2015-03-09 02:54:09.000000000 +0100
@@ -434,8 +434,8 @@
     ctx->mb_width  = FFALIGN(avctx->width,  16) >> 4;
     ctx->mb_height = FFALIGN(avctx->height, 16) >> 4;
 
-    ctx->num_x_slices = 16;
-    ctx->slice_width  = ctx->mb_width / 16;
+    ctx->num_x_slices = (ctx->mb_width + 15) >> 4;
+    ctx->slice_width  = 16;
     for (i = 1; i < 32; i++) {
         if (!(ctx->mb_width % i) && (ctx->mb_width / i < 32)) {
             ctx->slice_width  = ctx->mb_width / i;
diff -Nru libav-11.2/libavcodec/eamad.c libav-11.3/libavcodec/eamad.c
--- libav-11.2/libavcodec/eamad.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavcodec/eamad.c	2015-03-09 02:54:09.000000000 +0100
@@ -145,6 +145,11 @@
                 break;
             } else if (level != 0) {
                 i += run;
+                if (i > 63) {
+                    av_log(s->avctx, AV_LOG_ERROR,
+                           "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
+                    return;
+                }
                 j = scantable[i];
                 level = (level*quant_matrix[j]) >> 4;
                 level = (level-1)|1;
@@ -159,6 +164,11 @@
                 run = SHOW_UBITS(re, &s->gb, 6)+1; LAST_SKIP_BITS(re, &s->gb, 6);
 
                 i += run;
+                if (i > 63) {
+                    av_log(s->avctx, AV_LOG_ERROR,
+                           "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
+                    return;
+                }
                 j = scantable[i];
                 if (level < 0) {
                     level = -level;
@@ -170,10 +180,6 @@
                     level = (level-1)|1;
                 }
             }
-            if (i > 63) {
-                av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
-                return;
-            }
 
             block[j] = level;
         }
diff -Nru libav-11.2/libavcodec/h264.c libav-11.3/libavcodec/h264.c
--- libav-11.2/libavcodec/h264.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavcodec/h264.c	2015-03-09 02:54:09.000000000 +0100
@@ -686,6 +686,11 @@
     memset(h->sps_buffers, 0, sizeof(h->sps_buffers));
     memset(h->pps_buffers, 0, sizeof(h->pps_buffers));
 
+    h->avctx               = avctx;
+    h->rbsp_buffer[0]      = NULL;
+    h->rbsp_buffer[1]      = NULL;
+    h->rbsp_buffer_size[0] = 0;
+    h->rbsp_buffer_size[1] = 0;
     h->context_initialized = 0;
 
     return 0;
diff -Nru libav-11.2/libavcodec/h264_cabac.c libav-11.3/libavcodec/h264_cabac.c
--- libav-11.2/libavcodec/h264_cabac.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavcodec/h264_cabac.c	2015-03-09 02:54:09.000000000 +0100
@@ -1711,7 +1711,7 @@
 \
             if( coeff_abs >= 15 ) { \
                 int j = 0; \
-                while( get_cabac_bypass( CC ) ) { \
+                while (get_cabac_bypass(CC) && j < 30) { \
                     j++; \
                 } \
 \
diff -Nru libav-11.2/libavcodec/h264_slice.c libav-11.3/libavcodec/h264_slice.c
--- libav-11.2/libavcodec/h264_slice.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavcodec/h264_slice.c	2015-03-09 02:54:09.000000000 +0100
@@ -589,8 +589,11 @@
 
     h->cur_pic_ptr = REBASE_PICTURE(h1->cur_pic_ptr, h, h1);
     ff_h264_unref_picture(h, &h->cur_pic);
-    if ((ret = ff_h264_ref_picture(h, &h->cur_pic, &h1->cur_pic)) < 0)
-        return ret;
+    if (h1->cur_pic.f.buf[0]) {
+        ret = ff_h264_ref_picture(h, &h->cur_pic, &h1->cur_pic);
+        if (ret < 0)
+            return ret;
+    }
 
     h->workaround_bugs = h1->workaround_bugs;
     h->low_delay       = h1->low_delay;
diff -Nru libav-11.2/libavcodec/mdec.c libav-11.3/libavcodec/mdec.c
--- libav-11.2/libavcodec/mdec.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavcodec/mdec.c	2015-03-09 02:54:09.000000000 +0100
@@ -86,7 +86,12 @@
             if (level == 127) {
                 break;
             } else if (level != 0) {
-                i    += run;
+                i += run;
+                if (i > 63) {
+                    av_log(a->avctx, AV_LOG_ERROR,
+                           "ac-tex damaged at %d %d\n", a->mb_x, a->mb_y);
+                    return AVERROR_INVALIDDATA;
+                }
                 j     = scantable[i];
                 level = (level * qscale * quant_matrix[j]) >> 3;
                 level = (level ^ SHOW_SBITS(re, &a->gb, 1)) - SHOW_SBITS(re, &a->gb, 1);
@@ -96,8 +101,13 @@
                 run = SHOW_UBITS(re, &a->gb, 6)+1; LAST_SKIP_BITS(re, &a->gb, 6);
                 UPDATE_CACHE(re, &a->gb);
                 level = SHOW_SBITS(re, &a->gb, 10); SKIP_BITS(re, &a->gb, 10);
-                i    += run;
-                j     = scantable[i];
+                i += run;
+                if (i > 63) {
+                    av_log(a->avctx, AV_LOG_ERROR,
+                           "ac-tex damaged at %d %d\n", a->mb_x, a->mb_y);
+                    return AVERROR_INVALIDDATA;
+                }
+                j = scantable[i];
                 if (level < 0) {
                     level = -level;
                     level = (level * qscale * quant_matrix[j]) >> 3;
@@ -108,10 +118,6 @@
                     level = (level - 1) | 1;
                 }
             }
-            if (i > 63) {
-                av_log(a->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", a->mb_x, a->mb_y);
-                return AVERROR_INVALIDDATA;
-            }
 
             block[j] = level;
         }
diff -Nru libav-11.2/libavcodec/mpegvideo_enc.c libav-11.3/libavcodec/mpegvideo_enc.c
--- libav-11.2/libavcodec/mpegvideo_enc.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavcodec/mpegvideo_enc.c	2015-03-09 02:54:09.000000000 +0100
@@ -3412,8 +3412,11 @@
             ff_msmpeg4_encode_picture_header(s, picture_number);
         else if (CONFIG_MPEG4_ENCODER && s->h263_pred)
             ff_mpeg4_encode_picture_header(s, picture_number);
-        else if (CONFIG_RV10_ENCODER && s->codec_id == AV_CODEC_ID_RV10)
-            ff_rv10_encode_picture_header(s, picture_number);
+        else if (CONFIG_RV10_ENCODER && s->codec_id == AV_CODEC_ID_RV10) {
+            ret = ff_rv10_encode_picture_header(s, picture_number);
+            if (ret < 0)
+                return ret;
+        }
         else if (CONFIG_RV20_ENCODER && s->codec_id == AV_CODEC_ID_RV20)
             ff_rv20_encode_picture_header(s, picture_number);
         else if (CONFIG_FLV_ENCODER && s->codec_id == AV_CODEC_ID_FLV1)
diff -Nru libav-11.2/libavcodec/mpegvideo.h libav-11.3/libavcodec/mpegvideo.h
--- libav-11.2/libavcodec/mpegvideo.h	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavcodec/mpegvideo.h	2015-03-09 02:54:09.000000000 +0100
@@ -816,7 +816,7 @@
 extern const uint8_t ff_h263_chroma_qscale_table[32];
 
 /* rv10.c */
-void ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number);
+int ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number);
 int ff_rv_decode_dc(MpegEncContext *s, int n);
 void ff_rv20_encode_picture_header(MpegEncContext *s, int picture_number);
 
diff -Nru libav-11.2/libavcodec/proresdec.c libav-11.3/libavcodec/proresdec.c
--- libav-11.2/libavcodec/proresdec.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavcodec/proresdec.c	2015-03-09 02:54:09.000000000 +0100
@@ -365,6 +365,7 @@
     }
 }
 
+#define MAX_PADDING 16
 
 /**
  * Decode AC coefficients for all blocks in a slice.
@@ -389,7 +390,7 @@
         lev_cb_index = ff_prores_lev_to_cb_index[FFMIN(level, 9)];
 
         bits_left = get_bits_left(gb);
-        if (bits_left <= 0 || (bits_left <= 8 && !show_bits(gb, bits_left)))
+        if (bits_left <= 0 || (bits_left <= MAX_PADDING && !show_bits(gb, bits_left)))
             return 0;
 
         run = decode_vlc_codeword(gb, ff_prores_ac_codebook[run_cb_index]);
@@ -397,7 +398,7 @@
             return AVERROR_INVALIDDATA;
 
         bits_left = get_bits_left(gb);
-        if (bits_left <= 0 || (bits_left <= 8 && !show_bits(gb, bits_left)))
+        if (bits_left <= 0 || (bits_left <= MAX_PADDING && !show_bits(gb, bits_left)))
             return AVERROR_INVALIDDATA;
 
         level = decode_vlc_codeword(gb, ff_prores_ac_codebook[lev_cb_index]) + 1;
diff -Nru libav-11.2/libavcodec/rv10enc.c libav-11.3/libavcodec/rv10enc.c
--- libav-11.2/libavcodec/rv10enc.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavcodec/rv10enc.c	2015-03-09 02:54:09.000000000 +0100
@@ -28,7 +28,7 @@
 #include "mpegvideo.h"
 #include "put_bits.h"
 
-void ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number)
+int ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number)
 {
     int full_frame= 0;
 
@@ -48,12 +48,18 @@
     /* if multiple packets per frame are sent, the position at which
        to display the macroblocks is coded here */
     if(!full_frame){
+        if (s->mb_width * s->mb_height >= (1U << 12)) {
+            avpriv_report_missing_feature(s->avctx, "Encoding frames with %d (>= 4096) macroblocks",
+                                          s->mb_width * s->mb_height);
+            return AVERROR(ENOSYS);
+        }
         put_bits(&s->pb, 6, 0); /* mb_x */
         put_bits(&s->pb, 6, 0); /* mb_y */
         put_bits(&s->pb, 12, s->mb_width * s->mb_height);
     }
 
     put_bits(&s->pb, 3, 0);     /* ignored */
+    return 0;
 }
 
 FF_MPV_GENERIC_CLASS(rv10)
diff -Nru libav-11.2/libavcodec/tiff.c libav-11.3/libavcodec/tiff.c
--- libav-11.2/libavcodec/tiff.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavcodec/tiff.c	2015-03-09 02:54:09.000000000 +0100
@@ -248,6 +248,14 @@
 {
     int ret;
 
+    // make sure there is no aliasing in the following switch
+    if (s->bpp >= 100 || s->bppcount >= 10) {
+        av_log(s->avctx, AV_LOG_ERROR,
+               "Unsupported image parameters: bpp=%d, bppcount=%d\n",
+               s->bpp, s->bppcount);
+        return AVERROR_INVALIDDATA;
+    }
+
     switch (s->bpp * 10 + s->bppcount) {
     case 11:
         s->avctx->pix_fmt = AV_PIX_FMT_MONOBLACK;
diff -Nru libav-11.2/libavcodec/utvideodec.c libav-11.3/libavcodec/utvideodec.c
--- libav-11.2/libavcodec/utvideodec.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavcodec/utvideodec.c	2015-03-09 02:54:09.000000000 +0100
@@ -213,6 +213,8 @@
         slice_start  = ((slice * height) / slices) & cmask;
         slice_height = ((((slice + 1) * height) / slices) & cmask) -
                        slice_start;
+        if (!slice_height)
+            continue;
 
         bsrc = src + slice_start * stride;
 
@@ -269,6 +271,8 @@
         slice_height   = ((((slice + 1) * height) / slices) & cmask) -
                          slice_start;
         slice_height >>= 1;
+        if (!slice_height)
+            continue;
 
         bsrc = src + slice_start * stride;
 
diff -Nru libav-11.2/libavcodec/vorbisdec.c libav-11.3/libavcodec/vorbisdec.c
--- libav-11.2/libavcodec/vorbisdec.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavcodec/vorbisdec.c	2015-03-09 02:54:09.000000000 +0100
@@ -1308,7 +1308,7 @@
     int p, j, i;
     unsigned c_p_c         = vc->codebooks[vr->classbook].dimensions;
     unsigned inverse_class = ff_inverse[vr->classifications];
-    unsigned temp, temp2;
+    int temp, temp2;
     for (p = 0, j = 0; j < ch_used; ++j) {
         if (!do_not_decode[j]) {
             temp = get_vlc2(&vc->gb, vc->codebooks[vr->classbook].vlc.table,
@@ -1316,22 +1316,18 @@
 
             av_dlog(NULL, "Classword: %u\n", temp);
 
-            if (temp <= 65536) {
-                for (i = partition_count + c_p_c - 1; i >= partition_count; i--) {
-                    temp2 = (((uint64_t)temp) * inverse_class) >> 32;
-
-                    if (i < vr->ptns_to_read)
-                        vr->classifs[p + i] = temp - temp2 * vr->classifications;
-                    temp = temp2;
-                }
-            } else {
-                for (i = partition_count + c_p_c - 1; i >= partition_count; i--) {
-                    temp2 = temp / vr->classifications;
-
-                    if (i < vr->ptns_to_read)
-                        vr->classifs[p + i] = temp - temp2 * vr->classifications;
-                    temp = temp2;
-                }
+            if (temp < 0) {
+                av_log(vc->avctx, AV_LOG_ERROR,
+                       "Invalid vlc code decoding %d channel.", j);
+                return AVERROR_INVALIDDATA;
+            }
+
+            for (i = partition_count + c_p_c - 1; i >= partition_count; i--) {
+                temp2 = (((uint64_t)temp) * inverse_class) >> 32;
+
+                if (i < vr->ptns_to_read)
+                    vr->classifs[p + i] = temp - temp2 * vr->classifications;
+                temp = temp2;
             }
         }
         p += vr->ptns_to_read;
@@ -1381,7 +1377,9 @@
         voffset = vr->begin;
         for (partition_count = 0; partition_count < ptns_to_read;) {  // SPEC        error
             if (!pass) {
-                setup_classifs(vc, vr, do_not_decode, ch_used, partition_count);
+                int ret = setup_classifs(vc, vr, do_not_decode, ch_used, partition_count);
+                if (ret < 0)
+                    return ret;
             }
             for (i = 0; (i < c_p_c) && (partition_count < ptns_to_read); ++i) {
                 for (j_times_ptns_to_read = 0, j = 0; j < ch_used; ++j) {
diff -Nru libav-11.2/libavcodec/webp.c libav-11.3/libavcodec/webp.c
--- libav-11.2/libavcodec/webp.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavcodec/webp.c	2015-03-09 02:54:09.000000000 +0100
@@ -688,6 +688,11 @@
                 length = offset + get_bits(&s->gb, extra_bits) + 1;
             }
             prefix_code = huff_reader_get_symbol(&hg[HUFF_IDX_DIST], &s->gb);
+            if (prefix_code > 39) {
+                av_log(s->avctx, AV_LOG_ERROR,
+                       "distance prefix code too large: %d\n", prefix_code);
+                return AVERROR_INVALIDDATA;
+            }
             if (prefix_code < 4) {
                 distance = prefix_code + 1;
             } else {
diff -Nru libav-11.2/libavcodec/x86/hevc_deblock.asm libav-11.3/libavcodec/x86/hevc_deblock.asm
--- libav-11.2/libavcodec/x86/hevc_deblock.asm	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavcodec/x86/hevc_deblock.asm	2015-03-09 02:54:09.000000000 +0100
@@ -356,7 +356,7 @@
 %if %1 > 8
     shl             betaq, %1 - 8
 %endif
-    movd            m13, betaq
+    movd            m13, betad
     SPLATW          m13, m13, 0
     ;end beta calculations
 
@@ -620,7 +620,7 @@
     paddw           m15, m2; p1'
 
     ;beta calculations
-    movd            m10, betaq
+    movd            m10, betad
     SPLATW          m10, m10, 0
 
     movd            m13, r7d; 1dp0 + 1dp3
diff -Nru libav-11.2/libavformat/adxdec.c libav-11.3/libavformat/adxdec.c
--- libav-11.2/libavformat/adxdec.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavformat/adxdec.c	2015-03-09 02:54:09.000000000 +0100
@@ -89,8 +89,14 @@
         av_log(s, AV_LOG_ERROR, "Invalid extradata size.\n");
         return AVERROR_INVALIDDATA;
     }
+    avctx->channels    = AV_RB8(avctx->extradata + 7);
     avctx->sample_rate = AV_RB32(avctx->extradata + 8);
 
+    if (avctx->channels <= 0) {
+        av_log(s, AV_LOG_ERROR, "invalid number of channels %d\n", avctx->channels);
+        return AVERROR_INVALIDDATA;
+    }
+
     st->codec->codec_type  = AVMEDIA_TYPE_AUDIO;
     st->codec->codec_id    = s->iformat->raw_codec_id;
 
diff -Nru libav-11.2/libavformat/icecast.c libav-11.3/libavformat/icecast.c
--- libav-11.2/libavformat/icecast.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavformat/icecast.c	2015-03-09 02:54:09.000000000 +0100
@@ -126,6 +126,7 @@
     av_dict_set(&opt_dict, "method", s->legacy_icecast ? "SOURCE" : "PUT", 0);
     av_dict_set(&opt_dict, "auth_type", "basic", 0);
     av_dict_set(&opt_dict, "headers", headers, 0);
+    av_dict_set(&opt_dict, "chunked_post", "0", 0);
     if (NOT_EMPTY(s->content_type))
         av_dict_set(&opt_dict, "content_type", s->content_type, 0);
     if (NOT_EMPTY(s->user_agent))
diff -Nru libav-11.2/libavformat/img2dec.c libav-11.3/libavformat/img2dec.c
--- libav-11.2/libavformat/img2dec.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavformat/img2dec.c	2015-03-09 02:54:09.000000000 +0100
@@ -194,7 +194,7 @@
             return AVERROR(ENOENT);
         s->img_first  = first_index;
         s->img_last   = last_index;
-        s->img_number = first_index;
+        s->img_number = s->start_number != 1 ? s->start_number : first_index;
         /* compute duration */
         st->start_time = 0;
         st->duration   = last_index - first_index + 1;
diff -Nru libav-11.2/libavformat/matroskadec.c libav-11.3/libavformat/matroskadec.c
--- libav-11.2/libavformat/matroskadec.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavformat/matroskadec.c	2015-03-09 02:54:09.000000000 +0100
@@ -2532,7 +2532,7 @@
                               int64_t timestamp, int flags)
 {
     MatroskaDemuxContext *matroska = s->priv_data;
-    MatroskaTrack *tracks = matroska->tracks.elem;
+    MatroskaTrack *tracks = NULL;
     AVStream *st = s->streams[stream_index];
     int i, index, index_sub, index_min;
 
@@ -2562,6 +2562,7 @@
         return 0;
 
     index_min = index;
+    tracks = matroska->tracks.elem;
     for (i = 0; i < matroska->tracks.nb_elem; i++) {
         tracks[i].audio.pkt_cnt        = 0;
         tracks[i].audio.sub_packet_cnt = 0;
diff -Nru libav-11.2/libavformat/rmenc.c libav-11.3/libavformat/rmenc.c
--- libav-11.2/libavformat/rmenc.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavformat/rmenc.c	2015-03-09 02:54:09.000000000 +0100
@@ -44,6 +44,10 @@
 
 /* in ms */
 #define BUFFER_DURATION 0
+/* the header needs at most 7 + 4 + 12 B */
+#define MAX_HEADER_SIZE (7 + 4 + 12)
+/* UINT16_MAX is the maximal chunk size */
+#define MAX_PACKET_SIZE (UINT16_MAX - MAX_HEADER_SIZE)
 
 
 static void put_str(AVIOContext *s, const char *tag)
@@ -389,6 +393,10 @@
     /* Well, I spent some time finding the meaning of these bits. I am
        not sure I understood everything, but it works !! */
 #if 1
+    if (size > MAX_PACKET_SIZE) {
+        avpriv_report_missing_feature(s, "Muxing packets larger than 64 kB");
+        return AVERROR(ENOSYS);
+    }
     write_packet_header(s, stream, size + 7 + (size >= 0x4000)*4, key_frame);
     /* bit 7: '1' if final packet of a frame converted in several packets */
     avio_w8(pb, 0x81);
diff -Nru libav-11.2/libavutil/arm/asm.S libav-11.3/libavutil/arm/asm.S
--- libav-11.2/libavutil/arm/asm.S	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavutil/arm/asm.S	2015-03-09 02:54:09.000000000 +0100
@@ -49,11 +49,17 @@
 #elif HAVE_ARMV5TE
         .arch           armv5te
 #endif
+#if   HAVE_AS_OBJECT_ARCH
+ELF     .object_arch    armv4
+#endif
 
 #if   HAVE_NEON
         .fpu            neon
+ELF     .eabi_attribute 10, 0           @ suppress Tag_FP_arch
+ELF     .eabi_attribute 12, 0           @ suppress Tag_Advanced_SIMD_arch
 #elif HAVE_VFP
         .fpu            vfp
+ELF     .eabi_attribute 10, 0           @ suppress Tag_FP_arch
 #endif
 
         .syntax unified
diff -Nru libav-11.2/libavutil/log.c libav-11.3/libavutil/log.c
--- libav-11.2/libavutil/log.c	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/libavutil/log.c	2015-03-09 02:54:09.000000000 +0100
@@ -75,7 +75,8 @@
     char *term = getenv("TERM");
     use_color = !getenv("NO_COLOR") && !getenv("AV_LOG_FORCE_NOCOLOR") &&
                 (getenv("TERM") && isatty(2) || getenv("AV_LOG_FORCE_COLOR"));
-    use_color += term && strstr(term, "256color");
+    if (use_color)
+        use_color += term && strstr(term, "256color");
 #else
     use_color = getenv("AV_LOG_FORCE_COLOR") && !getenv("NO_COLOR") &&
                !getenv("AV_LOG_FORCE_NOCOLOR");
diff -Nru libav-11.2/RELEASE libav-11.3/RELEASE
--- libav-11.2/RELEASE	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/RELEASE	2015-03-09 02:54:09.000000000 +0100
@@ -1 +1 @@
-11.2
+11.3
diff -Nru libav-11.2/VERSION libav-11.3/VERSION
--- libav-11.2/VERSION	2015-01-14 21:50:49.000000000 +0100
+++ libav-11.3/VERSION	2015-03-09 02:54:09.000000000 +0100
@@ -1 +1 @@
-11.2
+11.3

Attachment: signature.asc
Description: Digital signature


Reply to: