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

Bug#854910: marked as done (unblock: ffmpeg/7:3.2.4-1)



Your message dated Sun, 12 Feb 2017 07:57:00 +0000
with message-id <b6242697-d027-d6fd-433f-66a30039791f@thykier.net>
and subject line Re: Bug#854910: unblock: ffmpeg/7:3.2.4-1
has caused the Debian Bug report #854910,
regarding unblock: ffmpeg/7:3.2.4-1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
854910: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=854910
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Dear Release Team,

The new FFmpeg upstream release contains bug fixes incuding fixes for
security issues. I believe most non-security releated issues would
deserve important severity, too.

I would like to upload the new upstream release to unstable and ship it
in Stretch, but I can also cherry-pick most fixes to the current package
it this would be acceptable.

Please share your opinion about the options.

Cheers,
Balint

unblock ffmpeg/7:3.2.4-1

diff -Nru ffmpeg-3.2.2/Changelog ffmpeg-3.2.4/Changelog
--- ffmpeg-3.2.2/Changelog	2016-12-06 00:28:58.000000000 +0100
+++ ffmpeg-3.2.4/Changelog	2017-02-10 14:25:37.000000000 +0100
@@ -1,6 +1,51 @@
 Entries are sorted chronologically from oldest to youngest within each release,
 releases are sorted from youngest to oldest.
 
+version 3.2.4:
+- avcodec/h264_slice: Clear ref_counts on redundant slices
+- lavf/mov.c: Avoid heap allocation wrap in mov_read_uuid
+- lavf/mov.c: Avoid heap allocation wrap in mov_read_hdlr
+- avcodec/pictordec: Fix logic error
+- ffserver_config: Setup codecpar in add_codec()
+- Changelog: fix typos
+
+version 3.2.3:
+- avcodec/movtextdec: Fix decode_styl() cleanup
+- lavf/matroskadec: fix is_keyframe for early Blocks
+- configure: bump year
+- avcodec/pngdec: Check trns more completely
+- avcodec/interplayvideo: Move parameter change check up
+- avcodec/dca_lbr: Fix off by 1 error in freq check
+- avcodec/mjpegdec: Check for for the bitstream end in mjpeg_decode_scan_progressive_ac()
+- pgssubdec: reset rle_data_len/rle_remaining_len on allocation error
+- swscale: save ebx register when it is not available
+- avformat/flacdec: Check avio_read result when reading flac block header.
+- avcodec/utils: correct align value for interplay
+- avcodec/vp56: Check for the bitstream end, pass error codes on
+- avcodec/mjpegdec: Check remaining bitstream in ljpeg_decode_yuv_scan()
+- avcodec/pngdec: Fix off by 1 size in decode_zbuf()
+- libopenmpt: add missing avio_read return value check
+- avcodec/bsf: Fix av_bsf_list_free()
+- avcodec/omx: Do not pass negative value into av_malloc()
+- avformat/avidec: skip odml master index chunks in avi_sync
+- avcodec/mjpegdec: Check for rgb before flipping
+- lavf/utils.c Protect against accessing entries[nb_entries]
+- avutil/random_seed: Reduce the time needed on systems with very low precision clock()
+- swscale/swscale: Fix dereference of stride array before null check
+- avutil/random_seed: Improve get_generic_seed() with higher precision clock()
+- avformat/mp3dec: fix msan warning when verifying mpa header
+- avformat/utils: Print verbose error message if stream count exceeds max_streams
+- avformat/options_table: Set the default maximum number of streams to 1000
+- lavf/chromaprint: Update for version 1.4
+- avutil: Add av_image_check_size2()
+- avformat: Add max_streams option
+- avcodec/ffv1enc: Allocate smaller packet if the worst case size cannot be allocated
+- avcodec/mpeg4videodec: Fix undefined shifts in mpeg4_decode_sprite_trajectory()
+- avformat/oggdec: Skip streams in duration correction that did not had their duration set.
+- avcodec/ffv1enc: Fix size of first slice
+- ffplay: fix sws_scale possible out of bounds array access
+- avfilter/vf_hwupload_cuda: Add min/max limits for the 'device' option
+
 version 3.2.2:
 - ffserver: Check chunk size
 - Avoid using the term "file" and prefer "url" in some docs and comments
diff -Nru ffmpeg-3.2.2/configure ffmpeg-3.2.4/configure
--- ffmpeg-3.2.2/configure	2016-12-06 00:28:58.000000000 +0100
+++ ffmpeg-3.2.4/configure	2017-02-10 14:25:25.000000000 +0100
@@ -6703,7 +6703,7 @@
 #define FFMPEG_CONFIG_H
 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
 #define FFMPEG_LICENSE "$(c_escape $license)"
-#define CONFIG_THIS_YEAR 2016
+#define CONFIG_THIS_YEAR 2017
 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
diff -Nru ffmpeg-3.2.2/debian/changelog ffmpeg-3.2.4/debian/changelog
--- ffmpeg-3.2.2/debian/changelog	2017-01-22 00:01:34.000000000 +0100
+++ ffmpeg-3.2.4/debian/changelog	2017-02-10 22:26:43.000000000 +0100
@@ -1,3 +1,14 @@
+ffmpeg (7:3.2.4-1) unstable; urgency=medium
+
+  * Import new upstream bugfix release 3.2.4.
+     - Fixes CVE-2016-9561, CVE-2017-5024 and CVE-2017-5025.
+  * Drop patches, included upstream:
+     - lavf-chromaprint-Update-for-version-1.4.patch
+     - libopenmpt-add-missing-avio_read-return-value-check.patch
+     - swscale-save-ebx-register-when-it-is-not-available.patch
+
+ -- Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>  Fri, 10 Feb 2017 22:24:45 +0100
+
 ffmpeg (7:3.2.2-2) unstable; urgency=medium
 
   * Cherry-pick patches from upstream:
diff -Nru ffmpeg-3.2.2/debian/patches/lavf-chromaprint-Update-for-version-1.4.patch ffmpeg-3.2.4/debian/patches/lavf-chromaprint-Update-for-version-1.4.patch
--- ffmpeg-3.2.2/debian/patches/lavf-chromaprint-Update-for-version-1.4.patch	2017-01-22 00:01:34.000000000 +0100
+++ ffmpeg-3.2.4/debian/patches/lavf-chromaprint-Update-for-version-1.4.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,25 +0,0 @@
-From: "Georgi D. Sotirov" <gdsotirov@dir.bg>
-Date: Tue, 6 Dec 2016 21:07:59 +0100
-Subject: lavf/chromaprint: Update for version 1.4
-
-Fixes ticket #5997.
----
- libavformat/chromaprint.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/libavformat/chromaprint.c b/libavformat/chromaprint.c
-index 8c9a6c01..4da02bef 100644
---- a/libavformat/chromaprint.c
-+++ b/libavformat/chromaprint.c
-@@ -39,7 +39,11 @@ typedef struct ChromaprintMuxContext {
-     int silence_threshold;
-     int algorithm;
-     FingerprintFormat fp_format;
-+#if CPR_VERSION_INT >= AV_VERSION_INT(1, 4, 0)
-+    ChromaprintContext *ctx;
-+#else
-     ChromaprintContext ctx;
-+#endif
- } ChromaprintMuxContext;
- 
- static void cleanup(ChromaprintMuxContext *cpr)
diff -Nru ffmpeg-3.2.2/debian/patches/libopenmpt-add-missing-avio_read-return-value-check.patch ffmpeg-3.2.4/debian/patches/libopenmpt-add-missing-avio_read-return-value-check.patch
--- ffmpeg-3.2.2/debian/patches/libopenmpt-add-missing-avio_read-return-value-check.patch	2017-01-22 00:01:34.000000000 +0100
+++ ffmpeg-3.2.4/debian/patches/libopenmpt-add-missing-avio_read-return-value-check.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,33 +0,0 @@
-From: Andreas Cadhalpun <andreas.cadhalpun@googlemail.com>
-Date: Sun, 1 Jan 2017 20:27:50 +0100
-Subject: libopenmpt: add missing avio_read return value check
-MIME-Version: 1.0
-Content-Type: text/plain; charset="utf-8"
-Content-Transfer-Encoding: 8bit
-
-This fixes heap-buffer-overflows in libopenmpt caused by interpreting
-the negative size value as unsigned size_t.
-
-Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
-Reviewed-by: Jörn Heusipp <osmanx@problemloesungsmaschine.de>
-Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
----
- libavformat/libopenmpt.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/libavformat/libopenmpt.c b/libavformat/libopenmpt.c
-index e7091ef9..35fd28f5 100644
---- a/libavformat/libopenmpt.c
-+++ b/libavformat/libopenmpt.c
-@@ -82,6 +82,11 @@ static int read_header_openmpt(AVFormatContext *s)
-     if (!buf)
-         return AVERROR(ENOMEM);
-     size = avio_read(s->pb, buf, size);
-+    if (size < 0) {
-+        av_log(s, AV_LOG_ERROR, "Reading input buffer failed.\n");
-+        av_freep(&buf);
-+        return size;
-+    }
- 
-     openmpt->module = openmpt_module_create_from_memory(buf, size, openmpt_logfunc, s, NULL);
-     av_freep(&buf);
diff -Nru ffmpeg-3.2.2/debian/patches/series ffmpeg-3.2.4/debian/patches/series
--- ffmpeg-3.2.2/debian/patches/series	2017-01-22 00:01:34.000000000 +0100
+++ ffmpeg-3.2.4/debian/patches/series	1970-01-01 01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-lavf-chromaprint-Update-for-version-1.4.patch
-swscale-save-ebx-register-when-it-is-not-available.patch
-libopenmpt-add-missing-avio_read-return-value-check.patch
diff -Nru ffmpeg-3.2.2/debian/patches/swscale-save-ebx-register-when-it-is-not-available.patch ffmpeg-3.2.4/debian/patches/swscale-save-ebx-register-when-it-is-not-available.patch
--- ffmpeg-3.2.2/debian/patches/swscale-save-ebx-register-when-it-is-not-available.patch	2017-01-22 00:01:34.000000000 +0100
+++ ffmpeg-3.2.4/debian/patches/swscale-save-ebx-register-when-it-is-not-available.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,107 +0,0 @@
-From: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
-Date: Fri, 16 Dec 2016 02:29:56 +0100
-Subject: swscale: save ebx register when it is not available
-
-Configure checks if the ebx register can be used for asm and it has to
-be saved if and only if this is not the case.
-Without this the build fails when configuring with --toolchain=hardened
---disable-pic on i386 using gcc 4.8:
-error: PIC register clobbered by '%ebx' in 'asm'
-
-In that case gcc 4.8 reserves the ebx register for the GOT needed for
-PIE, so it can't be used in asm directly.
-
-Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
-Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
----
- libswscale/x86/hscale_fast_bilinear_simd.c | 20 ++++++++++----------
- 1 file changed, 10 insertions(+), 10 deletions(-)
-
-diff --git a/libswscale/x86/hscale_fast_bilinear_simd.c b/libswscale/x86/hscale_fast_bilinear_simd.c
-index 2cba5f0a..60a2cbfc 100644
---- a/libswscale/x86/hscale_fast_bilinear_simd.c
-+++ b/libswscale/x86/hscale_fast_bilinear_simd.c
-@@ -199,7 +199,7 @@ void ff_hyscale_fast_mmxext(SwsContext *c, int16_t *dst,
- #if ARCH_X86_64
-     uint64_t retsave;
- #else
--#if defined(PIC)
-+#if !HAVE_EBX_AVAILABLE
-     uint64_t ebxsave;
- #endif
- #endif
-@@ -209,7 +209,7 @@ void ff_hyscale_fast_mmxext(SwsContext *c, int16_t *dst,
-         "mov               -8(%%rsp), %%"FF_REG_a"    \n\t"
-         "mov            %%"FF_REG_a", %5              \n\t"  // retsave
- #else
--#if defined(PIC)
-+#if !HAVE_EBX_AVAILABLE
-         "mov            %%"FF_REG_b", %5              \n\t"  // ebxsave
- #endif
- #endif
-@@ -255,7 +255,7 @@ void ff_hyscale_fast_mmxext(SwsContext *c, int16_t *dst,
-         "mov                      %5, %%"FF_REG_a" \n\t"
-         "mov            %%"FF_REG_a", -8(%%rsp)    \n\t"
- #else
--#if defined(PIC)
-+#if !HAVE_EBX_AVAILABLE
-         "mov                      %5, %%"FF_REG_b" \n\t"
- #endif
- #endif
-@@ -264,12 +264,12 @@ void ff_hyscale_fast_mmxext(SwsContext *c, int16_t *dst,
- #if ARCH_X86_64
-           ,"m"(retsave)
- #else
--#if defined(PIC)
-+#if !HAVE_EBX_AVAILABLE
-           ,"m" (ebxsave)
- #endif
- #endif
-         : "%"FF_REG_a, "%"FF_REG_c, "%"FF_REG_d, "%"FF_REG_S, "%"FF_REG_D
--#if ARCH_X86_64 || !defined(PIC)
-+#if ARCH_X86_64 || HAVE_EBX_AVAILABLE
-          ,"%"FF_REG_b
- #endif
-     );
-@@ -289,7 +289,7 @@ void ff_hcscale_fast_mmxext(SwsContext *c, int16_t *dst1, int16_t *dst2,
- #if ARCH_X86_64
-     DECLARE_ALIGNED(8, uint64_t, retsave);
- #else
--#if defined(PIC)
-+#if !HAVE_EBX_AVAILABLE
-     DECLARE_ALIGNED(8, uint64_t, ebxsave);
- #endif
- #endif
-@@ -298,7 +298,7 @@ void ff_hcscale_fast_mmxext(SwsContext *c, int16_t *dst1, int16_t *dst2,
-         "mov          -8(%%rsp), %%"FF_REG_a"    \n\t"
-         "mov       %%"FF_REG_a", %7              \n\t"  // retsave
- #else
--#if defined(PIC)
-+#if !HAVE_EBX_AVAILABLE
-         "mov       %%"FF_REG_b", %7              \n\t"  // ebxsave
- #endif
- #endif
-@@ -332,7 +332,7 @@ void ff_hcscale_fast_mmxext(SwsContext *c, int16_t *dst1, int16_t *dst2,
-         "mov                    %7, %%"FF_REG_a" \n\t"
-         "mov          %%"FF_REG_a", -8(%%rsp)    \n\t"
- #else
--#if defined(PIC)
-+#if !HAVE_EBX_AVAILABLE
-         "mov %7, %%"FF_REG_b"    \n\t"
- #endif
- #endif
-@@ -341,12 +341,12 @@ void ff_hcscale_fast_mmxext(SwsContext *c, int16_t *dst1, int16_t *dst2,
- #if ARCH_X86_64
-           ,"m"(retsave)
- #else
--#if defined(PIC)
-+#if !HAVE_EBX_AVAILABLE
-           ,"m" (ebxsave)
- #endif
- #endif
-         : "%"FF_REG_a, "%"FF_REG_c, "%"FF_REG_d, "%"FF_REG_S, "%"FF_REG_D
--#if ARCH_X86_64 || !defined(PIC)
-+#if ARCH_X86_64 || HAVE_EBX_AVAILABLE
-          ,"%"FF_REG_b
- #endif
-     );
diff -Nru ffmpeg-3.2.2/doc/Doxyfile ffmpeg-3.2.4/doc/Doxyfile
--- ffmpeg-3.2.2/doc/Doxyfile	2016-12-06 00:28:58.000000000 +0100
+++ ffmpeg-3.2.4/doc/Doxyfile	2017-02-10 14:25:37.000000000 +0100
@@ -38,7 +38,7 @@
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = 3.2.2
+PROJECT_NUMBER         = 3.2.4
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
 # for a project that appears at the top of each page and should give viewer a
diff -Nru ffmpeg-3.2.2/doc/formats.texi ffmpeg-3.2.4/doc/formats.texi
--- ffmpeg-3.2.2/doc/formats.texi	2016-12-06 00:28:53.000000000 +0100
+++ ffmpeg-3.2.4/doc/formats.texi	2017-02-10 14:25:26.000000000 +0100
@@ -209,6 +209,10 @@
 ffprobe -dump_separator "
                           "  -i ~/videos/matrixbench_mpeg2.mpg
 @end example
+
+@item max_streams @var{integer} (@emph{input})
+Specifies the maximum number of streams. This can be used to reject files that
+would require too many resources due to a large number of streams.
 @end table
 
 @c man end FORMAT OPTIONS
diff -Nru ffmpeg-3.2.2/ffplay.c ffmpeg-3.2.4/ffplay.c
--- ffmpeg-3.2.2/ffplay.c	2016-12-06 00:28:53.000000000 +0100
+++ ffmpeg-3.2.4/ffplay.c	2017-02-10 14:25:26.000000000 +0100
@@ -874,11 +874,11 @@
                 frame->width, frame->height, frame->format, frame->width, frame->height,
                 AV_PIX_FMT_BGRA, sws_flags, NULL, NULL, NULL);
             if (*img_convert_ctx != NULL) {
-                uint8_t *pixels;
-                int pitch;
-                if (!SDL_LockTexture(tex, NULL, (void **)&pixels, &pitch)) {
+                uint8_t *pixels[4];
+                int pitch[4];
+                if (!SDL_LockTexture(tex, NULL, (void **)pixels, pitch)) {
                     sws_scale(*img_convert_ctx, (const uint8_t * const *)frame->data, frame->linesize,
-                              0, frame->height, &pixels, &pitch);
+                              0, frame->height, pixels, pitch);
                     SDL_UnlockTexture(tex);
                 }
             } else {
@@ -904,8 +904,8 @@
 
                 if (vp->pts >= sp->pts + ((float) sp->sub.start_display_time / 1000)) {
                     if (!sp->uploaded) {
-                        uint8_t *pixels;
-                        int pitch;
+                        uint8_t* pixels[4];
+                        int pitch[4];
                         int i;
                         if (!sp->width || !sp->height) {
                             sp->width = vp->width;
@@ -930,9 +930,9 @@
                                 av_log(NULL, AV_LOG_FATAL, "Cannot initialize the conversion context\n");
                                 return;
                             }
-                            if (!SDL_LockTexture(is->sub_texture, (SDL_Rect *)sub_rect, (void **)&pixels, &pitch)) {
+                            if (!SDL_LockTexture(is->sub_texture, (SDL_Rect *)sub_rect, (void **)pixels, pitch)) {
                                 sws_scale(is->sub_convert_ctx, (const uint8_t * const *)sub_rect->data, sub_rect->linesize,
-                                          0, sub_rect->h, &pixels, &pitch);
+                                          0, sub_rect->h, pixels, pitch);
                                 SDL_UnlockTexture(is->sub_texture);
                             }
                         }
diff -Nru ffmpeg-3.2.2/ffserver_config.c ffmpeg-3.2.4/ffserver_config.c
--- ffmpeg-3.2.2/ffserver_config.c	2016-12-06 00:28:53.000000000 +0100
+++ ffmpeg-3.2.4/ffserver_config.c	2017-02-10 14:25:37.000000000 +0100
@@ -323,6 +323,8 @@
     av_dict_free(&recommended);
     av_stream_set_recommended_encoder_configuration(st, enc_config);
     st->codec = av;
+    st->codecpar = avcodec_parameters_alloc();
+    avcodec_parameters_from_context(st->codecpar, av);
     stream->streams[stream->nb_streams++] = st;
 }
 
diff -Nru ffmpeg-3.2.2/libavcodec/bsf.c ffmpeg-3.2.4/libavcodec/bsf.c
--- ffmpeg-3.2.2/libavcodec/bsf.c	2016-12-06 00:28:53.000000000 +0100
+++ ffmpeg-3.2.4/libavcodec/bsf.c	2017-02-10 14:25:26.000000000 +0100
@@ -403,7 +403,7 @@
 {
     int i;
 
-    if (*lst)
+    if (!*lst)
         return;
 
     for (i = 0; i < (*lst)->nb_bsfs; ++i)
diff -Nru ffmpeg-3.2.2/libavcodec/dca_lbr.c ffmpeg-3.2.4/libavcodec/dca_lbr.c
--- ffmpeg-3.2.2/libavcodec/dca_lbr.c	2016-12-06 00:28:53.000000000 +0100
+++ ffmpeg-3.2.4/libavcodec/dca_lbr.c	2017-02-10 14:25:26.000000000 +0100
@@ -310,7 +310,7 @@
                 break;  // End of subframe
 
             freq += diff - 2;
-            if (freq >> (5 - group) > s->nsubbands * 4 - 5) {
+            if (freq >> (5 - group) > s->nsubbands * 4 - 6) {
                 av_log(s->avctx, AV_LOG_ERROR, "Invalid spectral line offset\n");
                 return -1;
             }
diff -Nru ffmpeg-3.2.2/libavcodec/ffv1enc.c ffmpeg-3.2.4/libavcodec/ffv1enc.c
--- ffmpeg-3.2.2/libavcodec/ffv1enc.c	2016-12-06 00:28:53.000000000 +0100
+++ ffmpeg-3.2.4/libavcodec/ffv1enc.c	2017-02-10 14:25:26.000000000 +0100
@@ -1089,7 +1089,6 @@
     FFV1Context *f      = avctx->priv_data;
     RangeCoder *const c = &f->slice_context[0]->c;
     AVFrame *const p    = f->picture.f;
-    int used_count      = 0;
     uint8_t keystate    = 128;
     uint8_t *buf_p;
     int i, ret;
@@ -1145,6 +1144,11 @@
     if (f->version > 3)
         maxsize = AV_INPUT_BUFFER_MIN_SIZE + avctx->width*avctx->height*3LL*4;
 
+    if (maxsize > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE - 32) {
+        av_log(avctx, AV_LOG_WARNING, "Cannot allocate worst case packet size, the encoding could fail\n");
+        maxsize = INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE - 32;
+    }
+
     if ((ret = ff_alloc_packet2(avctx, pkt, maxsize, 0)) < 0)
         return ret;
 
@@ -1178,11 +1182,17 @@
         }
     }
 
-    for (i = 1; i < f->slice_count; i++) {
+    for (i = 0; i < f->slice_count; i++) {
         FFV1Context *fs = f->slice_context[i];
-        uint8_t *start  = pkt->data + (pkt->size - used_count) * (int64_t)i / f->slice_count;
+        uint8_t *start  = pkt->data + pkt->size * (int64_t)i / f->slice_count;
         int len         = pkt->size / f->slice_count;
-        ff_init_range_encoder(&fs->c, start, len);
+        if (i) {
+            ff_init_range_encoder(&fs->c, start, len);
+        } else {
+            av_assert0(fs->c.bytestream_end >= fs->c.bytestream_start + len);
+            av_assert0(fs->c.bytestream < fs->c.bytestream_start + len);
+            fs->c.bytestream_end = fs->c.bytestream_start + len;
+        }
     }
     avctx->execute(avctx, encode_slice, &f->slice_context[0], NULL,
                    f->slice_count, sizeof(void *));
diff -Nru ffmpeg-3.2.2/libavcodec/h264_slice.c ffmpeg-3.2.4/libavcodec/h264_slice.c
--- ffmpeg-3.2.2/libavcodec/h264_slice.c	2016-12-06 00:28:53.000000000 +0100
+++ ffmpeg-3.2.4/libavcodec/h264_slice.c	2017-02-10 14:25:37.000000000 +0100
@@ -1771,8 +1771,10 @@
         return ret;
 
     // discard redundant pictures
-    if (sl->redundant_pic_count > 0)
+    if (sl->redundant_pic_count > 0) {
+        sl->ref_count[0] = sl->ref_count[1] = 0;
         return 0;
+    }
 
     if (sl->first_mb_addr == 0 || !h->current_slice) {
         if (h->setup_finished) {
diff -Nru ffmpeg-3.2.2/libavcodec/interplayvideo.c ffmpeg-3.2.4/libavcodec/interplayvideo.c
--- ffmpeg-3.2.2/libavcodec/interplayvideo.c	2016-12-06 00:28:53.000000000 +0100
+++ ffmpeg-3.2.4/libavcodec/interplayvideo.c	2017-02-10 14:25:26.000000000 +0100
@@ -989,6 +989,11 @@
     AVFrame *frame = data;
     int ret;
 
+    if (av_packet_get_side_data(avpkt, AV_PKT_DATA_PARAM_CHANGE, NULL)) {
+        av_frame_unref(s->last_frame);
+        av_frame_unref(s->second_last_frame);
+    }
+
     if (buf_size < 2)
         return AVERROR_INVALIDDATA;
 
@@ -1000,10 +1005,6 @@
     if (buf_size < s->decoding_map_size + 2)
         return buf_size;
 
-    if (av_packet_get_side_data(avpkt, AV_PKT_DATA_PARAM_CHANGE, NULL)) {
-        av_frame_unref(s->last_frame);
-        av_frame_unref(s->second_last_frame);
-    }
 
     s->decoding_map = buf + 2;
     bytestream2_init(&s->stream_ptr, buf + 2 + s->decoding_map_size,
diff -Nru ffmpeg-3.2.2/libavcodec/mjpegdec.c ffmpeg-3.2.4/libavcodec/mjpegdec.c
--- ffmpeg-3.2.2/libavcodec/mjpegdec.c	2016-12-06 00:28:53.000000000 +0100
+++ ffmpeg-3.2.4/libavcodec/mjpegdec.c	2017-02-10 14:25:27.000000000 +0100
@@ -1082,6 +1082,10 @@
 
     for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
         for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
+            if (get_bits_left(&s->gb) < 1) {
+                av_log(s->avctx, AV_LOG_ERROR, "bitstream end in yuv_scan\n");
+                return AVERROR_INVALIDDATA;
+            }
             if (s->restart_interval && !s->restart_count){
                 s->restart_count = s->restart_interval;
                 resync_mb_x = mb_x;
@@ -1393,6 +1397,10 @@
         int block_idx    = mb_y * s->block_stride[c];
         int16_t (*block)[64] = &s->blocks[c][block_idx];
         uint8_t *last_nnz    = &s->last_nnz[c][block_idx];
+        if (get_bits_left(&s->gb) <= 0) {
+            av_log(s->avctx, AV_LOG_ERROR, "bitstream truncated in mjpeg_decode_scan_progressive_ac\n");
+            return AVERROR_INVALIDDATA;
+        }
         for (mb_x = 0; mb_x < s->mb_width; mb_x++, block++, last_nnz++) {
                 int ret;
                 if (s->restart_interval && !s->restart_count)
@@ -2386,7 +2394,7 @@
             }
         }
     }
-    if (s->flipped) {
+    if (s->flipped && !s->rgb) {
         int j;
         avcodec_get_chroma_sub_sample(s->avctx->pix_fmt, &hshift, &vshift);
         av_assert0(s->nb_components == av_pix_fmt_count_planes(s->picture_ptr->format));
diff -Nru ffmpeg-3.2.2/libavcodec/movtextdec.c ffmpeg-3.2.4/libavcodec/movtextdec.c
--- ffmpeg-3.2.2/libavcodec/movtextdec.c	2016-12-06 00:28:53.000000000 +0100
+++ ffmpeg-3.2.4/libavcodec/movtextdec.c	2017-02-10 14:25:27.000000000 +0100
@@ -116,6 +116,8 @@
             av_freep(&m->s[i]);
         }
         av_freep(&m->s);
+        m->count_s = 0;
+        m->style_entries = 0;
     }
 }
 
@@ -279,12 +281,14 @@
 static int decode_styl(const uint8_t *tsmb, MovTextContext *m, AVPacket *avpkt)
 {
     int i;
-    m->style_entries = AV_RB16(tsmb);
+    int style_entries = AV_RB16(tsmb);
     tsmb += 2;
     // A single style record is of length 12 bytes.
-    if (m->tracksize + m->size_var + 2 + m->style_entries * 12 > avpkt->size)
+    if (m->tracksize + m->size_var + 2 + style_entries * 12 > avpkt->size)
         return -1;
 
+    m->style_entries = style_entries;
+
     m->box_flags |= STYL_BOX;
     for(i = 0; i < m->style_entries; i++) {
         m->s_temp = av_malloc(sizeof(*m->s_temp));
diff -Nru ffmpeg-3.2.2/libavcodec/mpeg4videodec.c ffmpeg-3.2.4/libavcodec/mpeg4videodec.c
--- ffmpeg-3.2.2/libavcodec/mpeg4videodec.c	2016-12-06 00:28:53.000000000 +0100
+++ ffmpeg-3.2.4/libavcodec/mpeg4videodec.c	2017-02-10 14:25:27.000000000 +0100
@@ -315,13 +315,13 @@
         min_ab = FFMIN(alpha, beta);
         w3     = w2 >> min_ab;
         h3     = h2 >> min_ab;
-        s->sprite_offset[0][0] = (sprite_ref[0][0] << (alpha + beta + rho - min_ab)) +
+        s->sprite_offset[0][0] = (sprite_ref[0][0] * (1<<(alpha + beta + rho - min_ab))) +
                                  (-r * sprite_ref[0][0] + virtual_ref[0][0]) *
                                  h3 * (-vop_ref[0][0]) +
                                  (-r * sprite_ref[0][0] + virtual_ref[1][0]) *
                                  w3 * (-vop_ref[0][1]) +
                                  (1 << (alpha + beta + rho - min_ab - 1));
-        s->sprite_offset[0][1] = (sprite_ref[0][1] << (alpha + beta + rho - min_ab)) +
+        s->sprite_offset[0][1] = (sprite_ref[0][1] * (1 << (alpha + beta + rho - min_ab))) +
                                  (-r * sprite_ref[0][1] + virtual_ref[0][1]) *
                                  h3 * (-vop_ref[0][0]) +
                                  (-r * sprite_ref[0][1] + virtual_ref[1][1]) *
@@ -368,10 +368,10 @@
         int shift_y = 16 - ctx->sprite_shift[0];
         int shift_c = 16 - ctx->sprite_shift[1];
         for (i = 0; i < 2; i++) {
-            s->sprite_offset[0][i] <<= shift_y;
-            s->sprite_offset[1][i] <<= shift_c;
-            s->sprite_delta[0][i]  <<= shift_y;
-            s->sprite_delta[1][i]  <<= shift_y;
+            s->sprite_offset[0][i] *= 1 << shift_y;
+            s->sprite_offset[1][i] *= 1 << shift_c;
+            s->sprite_delta[0][i]  *= 1 << shift_y;
+            s->sprite_delta[1][i]  *= 1 << shift_y;
             ctx->sprite_shift[i]     = 16;
         }
         s->real_sprite_warping_points = ctx->num_sprite_warping_points;
diff -Nru ffmpeg-3.2.2/libavcodec/omx.c ffmpeg-3.2.4/libavcodec/omx.c
--- ffmpeg-3.2.2/libavcodec/omx.c	2016-12-06 00:28:53.000000000 +0100
+++ ffmpeg-3.2.4/libavcodec/omx.c	2017-02-10 14:25:27.000000000 +0100
@@ -761,7 +761,10 @@
             } else {
                 // If not, we need to allocate a new buffer with the right
                 // size and copy the input frame into it.
-                uint8_t *buf = av_malloc(av_image_get_buffer_size(avctx->pix_fmt, s->stride, s->plane_size, 1));
+                uint8_t *buf = NULL;
+                int image_buffer_size = av_image_get_buffer_size(avctx->pix_fmt, s->stride, s->plane_size, 1);
+                if (image_buffer_size >= 0)
+                    buf = av_malloc(image_buffer_size);
                 if (!buf) {
                     // Return the buffer to the queue so it's not lost
                     append_buffer(&s->input_mutex, &s->input_cond, &s->num_free_in_buffers, s->free_in_buffers, buffer);
diff -Nru ffmpeg-3.2.2/libavcodec/pgssubdec.c ffmpeg-3.2.4/libavcodec/pgssubdec.c
--- ffmpeg-3.2.2/libavcodec/pgssubdec.c	2016-12-06 00:28:53.000000000 +0100
+++ ffmpeg-3.2.4/libavcodec/pgssubdec.c	2017-02-10 14:25:27.000000000 +0100
@@ -300,8 +300,11 @@
 
     av_fast_padded_malloc(&object->rle, &object->rle_buffer_size, rle_bitmap_len);
 
-    if (!object->rle)
+    if (!object->rle) {
+        object->rle_data_len = 0;
+        object->rle_remaining_len = 0;
         return AVERROR(ENOMEM);
+    }
 
     memcpy(object->rle, buf, buf_size);
     object->rle_data_len = buf_size;
diff -Nru ffmpeg-3.2.2/libavcodec/pictordec.c ffmpeg-3.2.4/libavcodec/pictordec.c
--- ffmpeg-3.2.2/libavcodec/pictordec.c	2016-06-27 01:54:29.000000000 +0200
+++ ffmpeg-3.2.4/libavcodec/pictordec.c	2017-02-10 14:25:37.000000000 +0100
@@ -142,7 +142,7 @@
 
     if (av_image_check_size(s->width, s->height, 0, avctx) < 0)
         return -1;
-    if (s->width != avctx->width && s->height != avctx->height) {
+    if (s->width != avctx->width || s->height != avctx->height) {
         ret = ff_set_dimensions(avctx, s->width, s->height);
         if (ret < 0)
             return ret;
diff -Nru ffmpeg-3.2.2/libavcodec/pngdec.c ffmpeg-3.2.4/libavcodec/pngdec.c
--- ffmpeg-3.2.2/libavcodec/pngdec.c	2016-12-06 00:28:53.000000000 +0100
+++ ffmpeg-3.2.4/libavcodec/pngdec.c	2017-02-10 14:25:27.000000000 +0100
@@ -437,13 +437,13 @@
     av_bprint_init(bp, 0, -1);
 
     while (zstream.avail_in > 0) {
-        av_bprint_get_buffer(bp, 1, &buf, &buf_size);
-        if (!buf_size) {
+        av_bprint_get_buffer(bp, 2, &buf, &buf_size);
+        if (buf_size < 2) {
             ret = AVERROR(ENOMEM);
             goto fail;
         }
         zstream.next_out  = buf;
-        zstream.avail_out = buf_size;
+        zstream.avail_out = buf_size - 1;
         ret = inflate(&zstream, Z_PARTIAL_FLUSH);
         if (ret != Z_OK && ret != Z_STREAM_END) {
             ret = AVERROR_EXTERNAL;
@@ -772,6 +772,16 @@
 {
     int v, i;
 
+    if (!(s->state & PNG_IHDR)) {
+        av_log(avctx, AV_LOG_ERROR, "trns before IHDR\n");
+        return AVERROR_INVALIDDATA;
+    }
+
+    if (s->state & PNG_IDAT) {
+        av_log(avctx, AV_LOG_ERROR, "trns after IDAT\n");
+        return AVERROR_INVALIDDATA;
+    }
+
     if (s->color_type == PNG_COLOR_TYPE_PALETTE) {
         if (length > 256 || !(s->state & PNG_PLTE))
             return AVERROR_INVALIDDATA;
@@ -782,7 +792,8 @@
         }
     } else if (s->color_type == PNG_COLOR_TYPE_GRAY || s->color_type == PNG_COLOR_TYPE_RGB) {
         if ((s->color_type == PNG_COLOR_TYPE_GRAY && length != 2) ||
-            (s->color_type == PNG_COLOR_TYPE_RGB && length != 6))
+            (s->color_type == PNG_COLOR_TYPE_RGB && length != 6) ||
+            s->bit_depth == 1)
             return AVERROR_INVALIDDATA;
 
         for (i = 0; i < length / 2; i++) {
@@ -1241,6 +1252,8 @@
         size_t raw_bpp = s->bpp - byte_depth;
         unsigned x, y;
 
+        av_assert0(s->bit_depth > 1);
+
         for (y = 0; y < s->height; ++y) {
             uint8_t *row = &s->image_buf[s->image_linesize * y];
 
diff -Nru ffmpeg-3.2.2/libavcodec/utils.c ffmpeg-3.2.4/libavcodec/utils.c
--- ffmpeg-3.2.2/libavcodec/utils.c	2016-12-06 00:28:53.000000000 +0100
+++ ffmpeg-3.2.4/libavcodec/utils.c	2017-02-10 14:25:27.000000000 +0100
@@ -376,6 +376,10 @@
             w_align = 4;
             h_align = 4;
         }
+        if (s->codec_id == AV_CODEC_ID_INTERPLAY_VIDEO) {
+            w_align = 8;
+            h_align = 8;
+        }
         break;
     case AV_PIX_FMT_PAL8:
     case AV_PIX_FMT_BGR8:
@@ -385,7 +389,8 @@
             w_align = 4;
             h_align = 4;
         }
-        if (s->codec_id == AV_CODEC_ID_JV) {
+        if (s->codec_id == AV_CODEC_ID_JV ||
+            s->codec_id == AV_CODEC_ID_INTERPLAY_VIDEO) {
             w_align = 8;
             h_align = 8;
         }
diff -Nru ffmpeg-3.2.2/libavcodec/vp56.c ffmpeg-3.2.4/libavcodec/vp56.c
--- ffmpeg-3.2.2/libavcodec/vp56.c	2016-03-29 04:25:23.000000000 +0200
+++ ffmpeg-3.2.4/libavcodec/vp56.c	2017-02-09 17:14:55.000000000 +0100
@@ -381,12 +381,13 @@
     }
 }
 
-static void vp56_decode_mb(VP56Context *s, int row, int col, int is_alpha)
+static int vp56_decode_mb(VP56Context *s, int row, int col, int is_alpha)
 {
     AVFrame *frame_current, *frame_ref;
     VP56mb mb_type;
     VP56Frame ref_frame;
     int b, ab, b_max, plane, off;
+    int ret;
 
     if (s->frames[VP56_FRAME_CURRENT]->key_frame)
         mb_type = VP56_MB_INTRA;
@@ -394,14 +395,16 @@
         mb_type = vp56_decode_mv(s, row, col);
     ref_frame = ff_vp56_reference_frame[mb_type];
 
-    s->parse_coeff(s);
+    ret = s->parse_coeff(s);
+    if (ret < 0)
+        return ret;
 
     vp56_add_predictors_dc(s, ref_frame);
 
     frame_current = s->frames[VP56_FRAME_CURRENT];
     frame_ref = s->frames[ref_frame];
     if (mb_type != VP56_MB_INTRA && !frame_ref->data[0])
-        return;
+        return 0;
 
     ab = 6*is_alpha;
     b_max = 6 - 2*is_alpha;
@@ -451,6 +454,7 @@
         s->block_coeff[4][0] = 0;
         s->block_coeff[5][0] = 0;
     }
+    return 0;
 }
 
 static int vp56_size_changed(VP56Context *s)
@@ -653,7 +657,9 @@
         s->block_offset[5] = s->block_offset[4];
 
         for (mb_col=0; mb_col<s->mb_width; mb_col++) {
-            vp56_decode_mb(s, mb_row, mb_col, is_alpha);
+            int ret = vp56_decode_mb(s, mb_row, mb_col, is_alpha);
+            if (ret < 0)
+                return ret;
 
             for (y=0; y<4; y++) {
                 s->above_block_idx[y] += 2;
diff -Nru ffmpeg-3.2.2/libavcodec/vp56.h ffmpeg-3.2.4/libavcodec/vp56.h
--- ffmpeg-3.2.2/libavcodec/vp56.h	2016-03-29 04:25:23.000000000 +0200
+++ ffmpeg-3.2.4/libavcodec/vp56.h	2017-02-09 17:14:55.000000000 +0100
@@ -74,7 +74,7 @@
 typedef void (*VP56Filter)(VP56Context *s, uint8_t *dst, uint8_t *src,
                            int offset1, int offset2, int stride,
                            VP56mv mv, int mask, int select, int luma);
-typedef void (*VP56ParseCoeff)(VP56Context *s);
+typedef int  (*VP56ParseCoeff)(VP56Context *s);
 typedef void (*VP56DefaultModelsInit)(VP56Context *s);
 typedef void (*VP56ParseVectorModels)(VP56Context *s);
 typedef int  (*VP56ParseCoeffModels)(VP56Context *s);
diff -Nru ffmpeg-3.2.2/libavcodec/vp5.c ffmpeg-3.2.4/libavcodec/vp5.c
--- ffmpeg-3.2.2/libavcodec/vp5.c	2016-12-06 00:28:53.000000000 +0100
+++ ffmpeg-3.2.4/libavcodec/vp5.c	2017-02-10 14:25:27.000000000 +0100
@@ -170,7 +170,7 @@
     return 0;
 }
 
-static void vp5_parse_coeff(VP56Context *s)
+static int vp5_parse_coeff(VP56Context *s)
 {
     VP56RangeCoder *c = &s->c;
     VP56Model *model = s->modelp;
@@ -180,6 +180,11 @@
     int b, i, cg, idx, ctx, ctx_last;
     int pt = 0;    /* plane type (0 for Y, 1 for U or V) */
 
+    if (c->end >= c->buffer && c->bits >= 0) {
+        av_log(s->avctx, AV_LOG_ERROR, "End of AC stream reached in vp5_parse_coeff\n");
+        return AVERROR_INVALIDDATA;
+    }
+
     for (b=0; b<6; b++) {
         int ct = 1;    /* code type */
 
@@ -245,6 +250,7 @@
                 s->coeff_ctx[ff_vp56_b6to4[b]][i] = 5;
         s->above_blocks[s->above_block_idx[b]].not_null_dc = s->coeff_ctx[ff_vp56_b6to4[b]][0];
     }
+    return 0;
 }
 
 static void vp5_default_models_init(VP56Context *s)
diff -Nru ffmpeg-3.2.2/libavcodec/vp6.c ffmpeg-3.2.4/libavcodec/vp6.c
--- ffmpeg-3.2.2/libavcodec/vp6.c	2016-06-27 01:54:29.000000000 +0200
+++ ffmpeg-3.2.4/libavcodec/vp6.c	2017-02-09 17:14:55.000000000 +0100
@@ -40,8 +40,8 @@
 
 #define VP6_MAX_HUFF_SIZE 12
 
-static void vp6_parse_coeff(VP56Context *s);
-static void vp6_parse_coeff_huffman(VP56Context *s);
+static int vp6_parse_coeff(VP56Context *s);
+static int vp6_parse_coeff_huffman(VP56Context *s);
 
 static int vp6_parse_header(VP56Context *s, const uint8_t *buf, int buf_size)
 {
@@ -380,7 +380,7 @@
     return val;
 }
 
-static void vp6_parse_coeff_huffman(VP56Context *s)
+static int vp6_parse_coeff_huffman(VP56Context *s)
 {
     VP56Model *model = s->modelp;
     uint8_t *permute = s->idct_scantable;
@@ -402,7 +402,7 @@
                     break;
             } else {
                 if (get_bits_left(&s->gb) <= 0)
-                    return;
+                    return AVERROR_INVALIDDATA;
                 coeff = get_vlc2(&s->gb, vlc_coeff->table, FF_HUFFMAN_BITS, 3);
                 if (coeff == 0) {
                     if (coeff_idx) {
@@ -437,9 +437,10 @@
             vlc_coeff = &s->ract_vlc[pt][ct][cg];
         }
     }
+    return 0;
 }
 
-static void vp6_parse_coeff(VP56Context *s)
+static int vp6_parse_coeff(VP56Context *s)
 {
     VP56RangeCoder *c = s->ccp;
     VP56Model *model = s->modelp;
@@ -449,6 +450,11 @@
     int b, i, cg, idx, ctx;
     int pt = 0;    /* plane type (0 for Y, 1 for U or V) */
 
+    if (c->end >= c->buffer && c->bits >= 0) {
+        av_log(s->avctx, AV_LOG_ERROR, "End of AC stream reached in vp6_parse_coeff\n");
+        return AVERROR_INVALIDDATA;
+    }
+
     for (b=0; b<6; b++) {
         int ct = 1;    /* code type */
         int run = 1;
@@ -512,6 +518,7 @@
         s->left_block[ff_vp56_b6to4[b]].not_null_dc =
         s->above_blocks[s->above_block_idx[b]].not_null_dc = !!s->block_coeff[b][0];
     }
+    return 0;
 }
 
 static int vp6_block_variance(uint8_t *src, int stride)
diff -Nru ffmpeg-3.2.2/libavfilter/vf_hwupload_cuda.c ffmpeg-3.2.4/libavfilter/vf_hwupload_cuda.c
--- ffmpeg-3.2.2/libavfilter/vf_hwupload_cuda.c	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libavfilter/vf_hwupload_cuda.c	2017-02-10 14:25:27.000000000 +0100
@@ -191,7 +191,7 @@
 #define OFFSET(x) offsetof(CudaUploadContext, x)
 #define FLAGS (AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_VIDEO_PARAM)
 static const AVOption cudaupload_options[] = {
-    { "device", "Number of the device to use", OFFSET(device_idx), AV_OPT_TYPE_INT, { .i64 = 0 }, .flags = FLAGS },
+    { "device", "Number of the device to use", OFFSET(device_idx), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS },
     { NULL },
 };
 
diff -Nru ffmpeg-3.2.2/libavformat/avformat.h ffmpeg-3.2.4/libavformat/avformat.h
--- ffmpeg-3.2.2/libavformat/avformat.h	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libavformat/avformat.h	2017-02-10 14:25:27.000000000 +0100
@@ -1899,6 +1899,13 @@
      * - decoding: set by user through AVOptions (NO direct access)
      */
     char *protocol_blacklist;
+
+    /**
+     * The maximum number of streams.
+     * - encoding: unused
+     * - decoding: set by user through AVOptions (NO direct access)
+     */
+    int max_streams;
 } AVFormatContext;
 
 int av_format_get_probe_score(const AVFormatContext *s);
diff -Nru ffmpeg-3.2.2/libavformat/avidec.c ffmpeg-3.2.4/libavformat/avidec.c
--- ffmpeg-3.2.2/libavformat/avidec.c	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libavformat/avidec.c	2017-02-10 14:25:27.000000000 +0100
@@ -1203,7 +1203,8 @@
         if ((d[0] == 'i' && d[1] == 'x' && n < s->nb_streams) ||
             // parse JUNK
             (d[0] == 'J' && d[1] == 'U' && d[2] == 'N' && d[3] == 'K') ||
-            (d[0] == 'i' && d[1] == 'd' && d[2] == 'x' && d[3] == '1')) {
+            (d[0] == 'i' && d[1] == 'd' && d[2] == 'x' && d[3] == '1') ||
+            (d[0] == 'i' && d[1] == 'n' && d[2] == 'd' && d[3] == 'x')) {
             avio_skip(pb, size);
             goto start_sync;
         }
diff -Nru ffmpeg-3.2.2/libavformat/chromaprint.c ffmpeg-3.2.4/libavformat/chromaprint.c
--- ffmpeg-3.2.2/libavformat/chromaprint.c	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libavformat/chromaprint.c	2017-02-10 14:25:27.000000000 +0100
@@ -39,7 +39,11 @@
     int silence_threshold;
     int algorithm;
     FingerprintFormat fp_format;
+#if CPR_VERSION_INT >= AV_VERSION_INT(1, 4, 0)
+    ChromaprintContext *ctx;
+#else
     ChromaprintContext ctx;
+#endif
 } ChromaprintMuxContext;
 
 static void cleanup(ChromaprintMuxContext *cpr)
diff -Nru ffmpeg-3.2.2/libavformat/flacdec.c ffmpeg-3.2.4/libavformat/flacdec.c
--- ffmpeg-3.2.2/libavformat/flacdec.c	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libavformat/flacdec.c	2017-02-10 14:25:27.000000000 +0100
@@ -65,7 +65,8 @@
 
     /* process metadata blocks */
     while (!avio_feof(s->pb) && !metadata_last) {
-        avio_read(s->pb, header, 4);
+        if (avio_read(s->pb, header, 4) != 4)
+            return AVERROR(AVERROR_INVALIDDATA);
         flac_parse_block_header(header, &metadata_last, &metadata_type,
                                    &metadata_size);
         switch (metadata_type) {
diff -Nru ffmpeg-3.2.2/libavformat/libopenmpt.c ffmpeg-3.2.4/libavformat/libopenmpt.c
--- ffmpeg-3.2.2/libavformat/libopenmpt.c	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libavformat/libopenmpt.c	2017-02-10 14:25:27.000000000 +0100
@@ -82,6 +82,11 @@
     if (!buf)
         return AVERROR(ENOMEM);
     size = avio_read(s->pb, buf, size);
+    if (size < 0) {
+        av_log(s, AV_LOG_ERROR, "Reading input buffer failed.\n");
+        av_freep(&buf);
+        return size;
+    }
 
     openmpt->module = openmpt_module_create_from_memory(buf, size, openmpt_logfunc, s, NULL);
     av_freep(&buf);
diff -Nru ffmpeg-3.2.2/libavformat/matroskadec.c ffmpeg-3.2.4/libavformat/matroskadec.c
--- ffmpeg-3.2.2/libavformat/matroskadec.c	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libavformat/matroskadec.c	2017-02-10 14:25:27.000000000 +0100
@@ -88,6 +88,7 @@
     int list_elem_size;
     int data_offset;
     union {
+        int64_t     i;
         uint64_t    u;
         double      f;
         const char *s;
@@ -676,7 +677,7 @@
     { MATROSKA_ID_SIMPLEBLOCK,    EBML_BIN,  0, offsetof(MatroskaBlock, bin) },
     { MATROSKA_ID_BLOCKDURATION,  EBML_UINT, 0, offsetof(MatroskaBlock, duration) },
     { MATROSKA_ID_DISCARDPADDING, EBML_SINT, 0, offsetof(MatroskaBlock, discard_padding) },
-    { MATROSKA_ID_BLOCKREFERENCE, EBML_SINT, 0, offsetof(MatroskaBlock, reference) },
+    { MATROSKA_ID_BLOCKREFERENCE, EBML_SINT, 0, offsetof(MatroskaBlock, reference), { .i = INT64_MIN } },
     { MATROSKA_ID_CODECSTATE,     EBML_NONE },
     {                          1, EBML_UINT, 0, offsetof(MatroskaBlock, non_simple), { .u = 1 } },
     { 0 }
@@ -1051,6 +1052,9 @@
 
     for (i = 0; syntax[i].id; i++)
         switch (syntax[i].type) {
+        case EBML_SINT:
+            *(int64_t *) ((char *) data + syntax[i].data_offset) = syntax[i].def.i;
+            break;
         case EBML_UINT:
             *(uint64_t *) ((char *) data + syntax[i].data_offset) = syntax[i].def.u;
             break;
@@ -3289,7 +3293,7 @@
         matroska->current_cluster_num_blocks = blocks_list->nb_elem;
         i                                    = blocks_list->nb_elem - 1;
         if (blocks[i].bin.size > 0 && blocks[i].bin.data) {
-            int is_keyframe = blocks[i].non_simple ? !blocks[i].reference : -1;
+            int is_keyframe = blocks[i].non_simple ? blocks[i].reference == INT64_MIN : -1;
             uint8_t* additional = blocks[i].additional.size > 0 ?
                                     blocks[i].additional.data : NULL;
             if (!blocks[i].non_simple)
@@ -3327,7 +3331,7 @@
     blocks      = blocks_list->elem;
     for (i = 0; i < blocks_list->nb_elem; i++)
         if (blocks[i].bin.size > 0 && blocks[i].bin.data) {
-            int is_keyframe = blocks[i].non_simple ? !blocks[i].reference : -1;
+            int is_keyframe = blocks[i].non_simple ? blocks[i].reference == INT64_MIN : -1;
             res = matroska_parse_block(matroska, blocks[i].bin.data,
                                        blocks[i].bin.size, blocks[i].bin.pos,
                                        cluster.timecode, blocks[i].duration,
diff -Nru ffmpeg-3.2.2/libavformat/mov.c ffmpeg-3.2.4/libavformat/mov.c
--- ffmpeg-3.2.2/libavformat/mov.c	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libavformat/mov.c	2017-02-10 14:25:37.000000000 +0100
@@ -404,11 +404,11 @@
                 return ret;
             } else if (!key && c->found_hdlr_mdta && c->meta_keys) {
                 uint32_t index = AV_RB32(&atom.type);
-                if (index < c->meta_keys_count) {
+                if (index < c->meta_keys_count && index > 0) {
                     key = c->meta_keys[index];
                 } else {
                     av_log(c->fc, AV_LOG_WARNING,
-                           "The index of 'data' is out of range: %d >= %d.\n",
+                           "The index of 'data' is out of range: %d < 1 or >= %d.\n",
                            index, c->meta_keys_count);
                 }
             }
@@ -739,6 +739,8 @@
 
     title_size = atom.size - 24;
     if (title_size > 0) {
+        if (title_size > FFMIN(INT_MAX, SIZE_MAX-1))
+            return AVERROR_INVALIDDATA;
         title_str = av_malloc(title_size + 1); /* Add null terminator */
         if (!title_str)
             return AVERROR(ENOMEM);
@@ -4434,7 +4436,7 @@
         0x9c, 0x71, 0x99, 0x94, 0x91, 0xe3, 0xaf, 0xac
     };
 
-    if (atom.size < sizeof(uuid) || atom.size == INT64_MAX)
+    if (atom.size < sizeof(uuid) || atom.size >= FFMIN(INT_MAX, SIZE_MAX))
         return AVERROR_INVALIDDATA;
 
     ret = avio_read(pb, uuid, sizeof(uuid));
@@ -4597,8 +4599,8 @@
 
     avio_rb32(pb);        /* entries */
 
-    if (atom.size < 8) {
-        av_log(c->fc, AV_LOG_ERROR, "senc atom size %"PRId64" too small\n", atom.size);
+    if (atom.size < 8 || atom.size > FFMIN(INT_MAX, SIZE_MAX)) {
+        av_log(c->fc, AV_LOG_ERROR, "senc atom size %"PRId64" invalid\n", atom.size);
         return AVERROR_INVALIDDATA;
     }
 
@@ -4666,6 +4668,11 @@
         return 0;
     }
 
+    if (atom.size > FFMIN(INT_MAX, SIZE_MAX)) {
+        av_log(c->fc, AV_LOG_ERROR, "saiz atom auxiliary_info_sizes size %"PRId64" invalid\n", atom.size);
+        return AVERROR_INVALIDDATA;
+    }
+
     /* save the auxiliary info sizes as is */
     data_size = atom.size - atom_header_size;
 
diff -Nru ffmpeg-3.2.2/libavformat/mp3dec.c ffmpeg-3.2.4/libavformat/mp3dec.c
--- ffmpeg-3.2.2/libavformat/mp3dec.c	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libavformat/mp3dec.c	2017-02-10 14:25:27.000000000 +0100
@@ -457,7 +457,8 @@
         return CHECK_SEEK_FAILED;
 
     ret = avio_read(pb, &header_buf[0], 4);
-    if (ret < 0)
+    /* We should always find four bytes for a valid mpa header. */
+    if (ret < 4)
         return CHECK_SEEK_FAILED;
 
     header = AV_RB32(&header_buf[0]);
diff -Nru ffmpeg-3.2.2/libavformat/oggdec.c ffmpeg-3.2.4/libavformat/oggdec.c
--- ffmpeg-3.2.2/libavformat/oggdec.c	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libavformat/oggdec.c	2017-02-10 14:25:27.000000000 +0100
@@ -643,6 +643,8 @@
         int64_t pts;
         if (i < 0) continue;
         pts = ogg_calc_pts(s, i, NULL);
+        if (s->streams[i]->duration == AV_NOPTS_VALUE)
+            continue;
         if (pts != AV_NOPTS_VALUE && s->streams[i]->start_time == AV_NOPTS_VALUE && !ogg->streams[i].got_start) {
             s->streams[i]->duration -= pts;
             ogg->streams[i].got_start= 1;
diff -Nru ffmpeg-3.2.2/libavformat/options_table.h ffmpeg-3.2.4/libavformat/options_table.h
--- ffmpeg-3.2.2/libavformat/options_table.h	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libavformat/options_table.h	2017-02-10 14:25:27.000000000 +0100
@@ -105,6 +105,7 @@
 {"format_whitelist", "List of demuxers that are allowed to be used", OFFSET(format_whitelist), AV_OPT_TYPE_STRING, { .str = NULL },  CHAR_MIN, CHAR_MAX, D },
 {"protocol_whitelist", "List of protocols that are allowed to be used", OFFSET(protocol_whitelist), AV_OPT_TYPE_STRING, { .str = NULL },  CHAR_MIN, CHAR_MAX, D },
 {"protocol_blacklist", "List of protocols that are not allowed to be used", OFFSET(protocol_blacklist), AV_OPT_TYPE_STRING, { .str = NULL },  CHAR_MIN, CHAR_MAX, D },
+{"max_streams", "maximum number of streams", OFFSET(max_streams), AV_OPT_TYPE_INT, { .i64 = 1000 }, 0, INT_MAX, D },
 {NULL},
 };
 
diff -Nru ffmpeg-3.2.2/libavformat/utils.c ffmpeg-3.2.4/libavformat/utils.c
--- ffmpeg-3.2.2/libavformat/utils.c	2016-12-06 00:28:58.000000000 +0100
+++ ffmpeg-3.2.4/libavformat/utils.c	2017-02-10 14:25:27.000000000 +0100
@@ -1980,7 +1980,7 @@
         m         = (a + b) >> 1;
 
         // Search for the next non-discarded packet.
-        while ((entries[m].flags & AVINDEX_DISCARD_FRAME) && m < b) {
+        while ((entries[m].flags & AVINDEX_DISCARD_FRAME) && m < b && m < nb_entries - 1) {
             m++;
             if (m == b && entries[m].timestamp >= wanted_timestamp) {
                 m = b - 1;
@@ -4213,8 +4213,11 @@
     int i;
     AVStream **streams;
 
-    if (s->nb_streams >= INT_MAX/sizeof(*streams))
+    if (s->nb_streams >= FFMIN(s->max_streams, INT_MAX/sizeof(*streams))) {
+        if (s->max_streams < INT_MAX/sizeof(*streams))
+            av_log(s, AV_LOG_ERROR, "Number of streams exceeds max_streams parameter (%d), see the documentation if you wish to increase it\n", s->max_streams);
         return NULL;
+    }
     streams = av_realloc_array(s->streams, s->nb_streams + 1, sizeof(*streams));
     if (!streams)
         return NULL;
diff -Nru ffmpeg-3.2.2/libavformat/version.h ffmpeg-3.2.4/libavformat/version.h
--- ffmpeg-3.2.2/libavformat/version.h	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libavformat/version.h	2017-02-10 14:25:27.000000000 +0100
@@ -33,7 +33,7 @@
 // Also please add any ticket numbers that you believe might be affected here
 #define LIBAVFORMAT_VERSION_MAJOR  57
 #define LIBAVFORMAT_VERSION_MINOR  56
-#define LIBAVFORMAT_VERSION_MICRO 100
+#define LIBAVFORMAT_VERSION_MICRO 101
 
 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
                                                LIBAVFORMAT_VERSION_MINOR, \
diff -Nru ffmpeg-3.2.2/libavutil/imgutils.c ffmpeg-3.2.4/libavutil/imgutils.c
--- ffmpeg-3.2.2/libavutil/imgutils.c	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libavutil/imgutils.c	2017-02-10 14:25:28.000000000 +0100
@@ -248,19 +248,38 @@
     .parent_log_context_offset = offsetof(ImgUtils, log_ctx),
 };
 
-int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
+int av_image_check_size2(unsigned int w, unsigned int h, int64_t max_pixels, enum AVPixelFormat pix_fmt, int log_offset, void *log_ctx)
 {
     ImgUtils imgutils = {
         .class      = &imgutils_class,
         .log_offset = log_offset,
         .log_ctx    = log_ctx,
     };
+    int64_t stride = av_image_get_linesize(pix_fmt, w, 0);
+    if (stride <= 0)
+        stride = 8LL*w;
+    stride += 128*8;
+
+    if ((int)w<=0 || (int)h<=0 || stride >= INT_MAX || stride*(uint64_t)(h+128) >= INT_MAX) {
+        av_log(&imgutils, AV_LOG_ERROR, "Picture size %ux%u is invalid\n", w, h);
+        return AVERROR(EINVAL);
+    }
+
+    if (max_pixels < INT64_MAX) {
+        if (w*(int64_t)h > max_pixels) {
+            av_log(&imgutils, AV_LOG_ERROR,
+                    "Picture size %ux%u exceeds specified max pixel count %"PRId64", see the documentation if you wish to increase it\n",
+                    w, h, max_pixels);
+            return AVERROR(EINVAL);
+        }
+    }
 
-    if ((int)w>0 && (int)h>0 && (w+128)*(uint64_t)(h+128) < INT_MAX/8)
-        return 0;
+    return 0;
+}
 
-    av_log(&imgutils, AV_LOG_ERROR, "Picture size %ux%u is invalid\n", w, h);
-    return AVERROR(EINVAL);
+int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
+{
+    return av_image_check_size2(w, h, INT64_MAX, AV_PIX_FMT_NONE, log_offset, log_ctx);
 }
 
 int av_image_check_sar(unsigned int w, unsigned int h, AVRational sar)
diff -Nru ffmpeg-3.2.2/libavutil/imgutils.h ffmpeg-3.2.4/libavutil/imgutils.h
--- ffmpeg-3.2.2/libavutil/imgutils.h	2016-03-29 04:25:32.000000000 +0200
+++ ffmpeg-3.2.4/libavutil/imgutils.h	2017-02-09 17:14:55.000000000 +0100
@@ -192,6 +192,20 @@
 int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx);
 
 /**
+ * Check if the given dimension of an image is valid, meaning that all
+ * bytes of the image can be addressed with a signed int.
+ *
+ * @param w the width of the picture
+ * @param h the height of the picture
+ * @param max_pixels the maximum number of pixels the user wants to accept
+ * @param pix_fmt the pixel format, can be AV_PIX_FMT_NONE if unknown.
+ * @param log_offset the offset to sum to the log level for logging with log_ctx
+ * @param log_ctx the parent logging context, it may be NULL
+ * @return >= 0 if valid, a negative error code otherwise
+ */
+int av_image_check_size2(unsigned int w, unsigned int h, int64_t max_pixels, enum AVPixelFormat pix_fmt, int log_offset, void *log_ctx);
+
+/**
  * Check if the given sample aspect ratio of an image is valid.
  *
  * It is considered invalid if the denominator is 0 or if applying the ratio
diff -Nru ffmpeg-3.2.2/libavutil/random_seed.c ffmpeg-3.2.4/libavutil/random_seed.c
--- ffmpeg-3.2.2/libavutil/random_seed.c	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libavutil/random_seed.c	2017-02-10 14:25:28.000000000 +0100
@@ -67,6 +67,7 @@
     uint8_t tmp[120];
     struct AVSHA *sha = (void*)tmp;
     clock_t last_t  = 0;
+    clock_t last_td = 0;
     static uint64_t i = 0;
     static uint32_t buffer[512] = { 0 };
     unsigned char digest[20];
@@ -86,11 +87,12 @@
 
     for (;;) {
         clock_t t = clock();
-
-        if (last_t == t) {
-            buffer[i & 511]++;
+        if (last_t + 2*last_td + (CLOCKS_PER_SEC > 1000) >= t) {
+            last_td = t - last_t;
+            buffer[i & 511] = 1664525*buffer[i & 511] + 1013904223 + (last_td % 3294638521U);
         } else {
-            buffer[++i & 511] += (t - last_t) % 3294638521U;
+            last_td = t - last_t;
+            buffer[++i & 511] += last_td % 3294638521U;
             if (last_i && i - last_i > 4 || i - last_i > 64 || TEST && i - last_i > 8)
                 break;
         }
diff -Nru ffmpeg-3.2.2/libavutil/version.h ffmpeg-3.2.4/libavutil/version.h
--- ffmpeg-3.2.2/libavutil/version.h	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libavutil/version.h	2017-02-10 14:25:28.000000000 +0100
@@ -80,7 +80,7 @@
 
 #define LIBAVUTIL_VERSION_MAJOR  55
 #define LIBAVUTIL_VERSION_MINOR  34
-#define LIBAVUTIL_VERSION_MICRO 100
+#define LIBAVUTIL_VERSION_MICRO 101
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
                                                LIBAVUTIL_VERSION_MINOR, \
diff -Nru ffmpeg-3.2.2/libswscale/swscale.c ffmpeg-3.2.4/libswscale/swscale.c
--- ffmpeg-3.2.2/libswscale/swscale.c	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libswscale/swscale.c	2017-02-10 14:25:28.000000000 +0100
@@ -762,10 +762,8 @@
     uint8_t *rgb0_tmp = NULL;
     int macro_height = isBayer(c->srcFormat) ? 2 : (1 << c->chrSrcVSubSample);
     // copy strides, so they can safely be modified
-    int srcStride2[4] = { srcStride[0], srcStride[1], srcStride[2],
-                            srcStride[3] };
-    int dstStride2[4] = { dstStride[0], dstStride[1], dstStride[2],
-                            dstStride[3] };
+    int srcStride2[4];
+    int dstStride2[4];
     int srcSliceY_internal = srcSliceY;
 
     if (!srcStride || !dstStride || !dst || !srcSlice) {
@@ -773,6 +771,11 @@
         return 0;
     }
 
+    for (i=0; i<4; i++) {
+        srcStride2[i] = srcStride[i];
+        dstStride2[i] = dstStride[i];
+    }
+
     if ((srcSliceY & (macro_height-1)) ||
         ((srcSliceH& (macro_height-1)) && srcSliceY + srcSliceH != c->srcH) ||
         srcSliceY + srcSliceH > c->srcH) {
diff -Nru ffmpeg-3.2.2/libswscale/x86/hscale_fast_bilinear_simd.c ffmpeg-3.2.4/libswscale/x86/hscale_fast_bilinear_simd.c
--- ffmpeg-3.2.2/libswscale/x86/hscale_fast_bilinear_simd.c	2016-12-06 00:28:54.000000000 +0100
+++ ffmpeg-3.2.4/libswscale/x86/hscale_fast_bilinear_simd.c	2017-02-10 14:25:28.000000000 +0100
@@ -199,7 +199,7 @@
 #if ARCH_X86_64
     uint64_t retsave;
 #else
-#if defined(PIC)
+#if !HAVE_EBX_AVAILABLE
     uint64_t ebxsave;
 #endif
 #endif
@@ -209,7 +209,7 @@
         "mov               -8(%%rsp), %%"FF_REG_a"    \n\t"
         "mov            %%"FF_REG_a", %5              \n\t"  // retsave
 #else
-#if defined(PIC)
+#if !HAVE_EBX_AVAILABLE
         "mov            %%"FF_REG_b", %5              \n\t"  // ebxsave
 #endif
 #endif
@@ -255,7 +255,7 @@
         "mov                      %5, %%"FF_REG_a" \n\t"
         "mov            %%"FF_REG_a", -8(%%rsp)    \n\t"
 #else
-#if defined(PIC)
+#if !HAVE_EBX_AVAILABLE
         "mov                      %5, %%"FF_REG_b" \n\t"
 #endif
 #endif
@@ -264,12 +264,12 @@
 #if ARCH_X86_64
           ,"m"(retsave)
 #else
-#if defined(PIC)
+#if !HAVE_EBX_AVAILABLE
           ,"m" (ebxsave)
 #endif
 #endif
         : "%"FF_REG_a, "%"FF_REG_c, "%"FF_REG_d, "%"FF_REG_S, "%"FF_REG_D
-#if ARCH_X86_64 || !defined(PIC)
+#if ARCH_X86_64 || HAVE_EBX_AVAILABLE
          ,"%"FF_REG_b
 #endif
     );
@@ -289,7 +289,7 @@
 #if ARCH_X86_64
     DECLARE_ALIGNED(8, uint64_t, retsave);
 #else
-#if defined(PIC)
+#if !HAVE_EBX_AVAILABLE
     DECLARE_ALIGNED(8, uint64_t, ebxsave);
 #endif
 #endif
@@ -298,7 +298,7 @@
         "mov          -8(%%rsp), %%"FF_REG_a"    \n\t"
         "mov       %%"FF_REG_a", %7              \n\t"  // retsave
 #else
-#if defined(PIC)
+#if !HAVE_EBX_AVAILABLE
         "mov       %%"FF_REG_b", %7              \n\t"  // ebxsave
 #endif
 #endif
@@ -332,7 +332,7 @@
         "mov                    %7, %%"FF_REG_a" \n\t"
         "mov          %%"FF_REG_a", -8(%%rsp)    \n\t"
 #else
-#if defined(PIC)
+#if !HAVE_EBX_AVAILABLE
         "mov %7, %%"FF_REG_b"    \n\t"
 #endif
 #endif
@@ -341,12 +341,12 @@
 #if ARCH_X86_64
           ,"m"(retsave)
 #else
-#if defined(PIC)
+#if !HAVE_EBX_AVAILABLE
           ,"m" (ebxsave)
 #endif
 #endif
         : "%"FF_REG_a, "%"FF_REG_c, "%"FF_REG_d, "%"FF_REG_S, "%"FF_REG_D
-#if ARCH_X86_64 || !defined(PIC)
+#if ARCH_X86_64 || HAVE_EBX_AVAILABLE
          ,"%"FF_REG_b
 #endif
     );
diff -Nru ffmpeg-3.2.2/RELEASE ffmpeg-3.2.4/RELEASE
--- ffmpeg-3.2.2/RELEASE	2016-12-06 00:28:58.000000000 +0100
+++ ffmpeg-3.2.4/RELEASE	2017-02-10 14:25:37.000000000 +0100
@@ -1 +1 @@
-3.2.2
+3.2.4
diff -Nru ffmpeg-3.2.2/VERSION ffmpeg-3.2.4/VERSION
--- ffmpeg-3.2.2/VERSION	2016-12-06 00:28:58.000000000 +0100
+++ ffmpeg-3.2.4/VERSION	2017-02-10 14:25:37.000000000 +0100
@@ -1 +1 @@
-3.2.2
+3.2.4

--- End Message ---
--- Begin Message ---
Bálint Réczey:
> 2017-02-11 21:39 GMT+01:00 Niels Thykier <niels@thykier.net>:
>> Control: tags -1 confirmed
>>
>> Balint Reczey:
>>> Package: release.debian.org
>>> Severity: normal
>>> User: release.debian.org@packages.debian.org
>>> Usertags: unblock
>>>
>>> Dear Release Team,
>>>
>>> The new FFmpeg upstream release contains bug fixes incuding fixes for
>>> security issues. I believe most non-security releated issues would
>>> deserve important severity, too.
>>>
>>> I would like to upload the new upstream release to unstable and ship it
>>> in Stretch, but I can also cherry-pick most fixes to the current package
>>> it this would be acceptable.
>>>
>>> Please share your opinion about the options.
>>>
>>> Cheers,
>>> Balint
>>>
>>> unblock ffmpeg/7:3.2.4-1
>>>
>>
>> Please go ahead.
> 
> Done, thanks!
> 
> Cheers,
> Balint
> 

Unblocked, thanks.

~Niels

--- End Message ---

Reply to: