swr: check channel layouts before using them.
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 13 Feb 2013 16:49:16 +0000 (17:49 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 3 Mar 2013 02:00:51 +0000 (03:00 +0100)
Fixes out of array accesses

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 21cd905cd44a4bbafe8631bbaa6021d328413ce5)

Conflicts:

libswresample/swresample.c

libswresample/swresample.c

index b8c646f..4becb07 100644 (file)
@@ -223,6 +223,16 @@ av_cold int swr_init(struct SwrContext *s){
 
     s->flushed = 0;
 
+    if(av_get_channel_layout_nb_channels(s-> in_ch_layout) > SWR_CH_MAX) {
+        av_log(s, AV_LOG_WARNING, "Input channel layout 0x%"PRIx64" is invalid or unsupported.\n", s-> in_ch_layout);
+        s->in_ch_layout = 0;
+    }
+
+    if(av_get_channel_layout_nb_channels(s->out_ch_layout) > SWR_CH_MAX) {
+        av_log(s, AV_LOG_WARNING, "Output channel layout 0x%"PRIx64" is invalid or unsupported.\n", s->out_ch_layout);
+        s->out_ch_layout = 0;
+    }
+
     if(s-> in_sample_fmt >= AV_SAMPLE_FMT_NB){
         av_log(s, AV_LOG_ERROR, "Requested input sample format %d is invalid\n", s->in_sample_fmt);
         return AVERROR(EINVAL);