Browse Source

avcodec/bitstream: Check bits in ff_init_vlc_sparse()

Fixes out of array reads

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
tags/n2.0
Michael Niedermayer 12 years ago
parent
commit
fb3e3808ae
1 changed files with 4 additions and 0 deletions
  1. +4
    -0
      libavcodec/bitstream.c

+ 4
- 0
libavcodec/bitstream.c View File

@@ -305,6 +305,10 @@ int ff_init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes,
GET_DATA(buf[j].bits, bits, i, bits_wrap, bits_size);\ GET_DATA(buf[j].bits, bits, i, bits_wrap, bits_size);\
if (!(condition))\ if (!(condition))\
continue;\ continue;\
if (buf[j].bits > 3*nb_bits || buf[j].bits>32) {\
av_log(NULL, AV_LOG_ERROR, "Too long VLC in init_vlc\n");\
return -1;\
}\
GET_DATA(buf[j].code, codes, i, codes_wrap, codes_size);\ GET_DATA(buf[j].code, codes, i, codes_wrap, codes_size);\
if (flags & INIT_VLC_LE)\ if (flags & INIT_VLC_LE)\
buf[j].code = bitswap_32(buf[j].code);\ buf[j].code = bitswap_32(buf[j].code);\


Loading…
Cancel
Save