vlc/vlc-2.2 | branch: master | Francois Cartegnie <[email protected]> | Thu Sep 29 11:00:21 2016 +0200| [b9803429fb7e94682a962ac5d633b1e66acbe6c6] | committer: Jean-Baptiste Kempf
codec: adpcm: check max channels (cherry picked from commit bd85994455bd35e7e83816e65d84b0a873d8ca8d) Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=b9803429fb7e94682a962ac5d633b1e66acbe6c6 --- modules/codec/adpcm.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/modules/codec/adpcm.c b/modules/codec/adpcm.c index 6a6a2cc..a3b9c6d 100644 --- a/modules/codec/adpcm.c +++ b/modules/codec/adpcm.c @@ -171,22 +171,19 @@ static int OpenDecoder( vlc_object_t *p_this ) p_sys->prev = NULL; + uint8_t i_max_channels = 32; switch( p_dec->fmt_in.i_codec ) { case VLC_FOURCC('i','m','a', '4'): /* IMA ADPCM */ - if (p_dec->fmt_in.audio.i_channels > 2) { - free(p_sys); - msg_Err(p_dec, "Invalid number of channels %i", - p_dec->fmt_in.audio.i_channels ); - return VLC_EGENERIC; - } p_sys->codec = ADPCM_IMA_QT; + i_max_channels = 2; break; case VLC_CODEC_ADPCM_IMA_WAV: /* IMA ADPCM */ p_sys->codec = ADPCM_IMA_WAV; break; case VLC_CODEC_ADPCM_MS: /* MS ADPCM */ p_sys->codec = ADPCM_MS; + i_max_channels = 2; break; case VLC_CODEC_ADPCM_DK4: /* Duck DK4 ADPCM */ p_sys->codec = ADPCM_DK4; @@ -206,6 +203,15 @@ static int OpenDecoder( vlc_object_t *p_this ) break; } + if (p_dec->fmt_in.audio.i_channels > i_max_channels || + p_dec->fmt_in.audio.i_channels == 0) + { + free(p_sys->prev); + free(p_sys); + msg_Err( p_dec, "Invalid number of channels %i", p_dec->fmt_in.audio.i_channels ); + return VLC_EGENERIC; + } + if( p_dec->fmt_in.audio.i_blockalign <= 0 ) { p_sys->i_block = (p_sys->codec == ADPCM_IMA_QT) ? _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
