aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-10-26 00:05:26 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2021-02-27 07:20:58 +0100
commit943ce3a75684bb32b706a5832635892bc7d9ac9e (patch)
tree572429594beeede30ac26a3b26c15ea4675e1edb
parentda5ac1563e60b370b881291c5bde11d02c995b70 (diff)
downloadffmpeg-943ce3a75684bb32b706a5832635892bc7d9ac9e.tar.gz
avcodec/bitstream: Consistently treat symbol as VLC_TYPE
If a static VLC table gets initialized a second time (or concurrently by two threads) and if said VLC table uses symbols that have the sign bit of VLC_TYPE (a typedef for int16_t) set, initializing the VLC fails. The reason is that the type of the symbol in the temporary array is an uint16_t and so comparing it to the symbol read from the VLC table will fail, because only the lower 16bits coincide. Said failure triggers an assert. Reviewed-by: Lynne <dev@lynne.ee> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> (cherry picked from commit df6ec7f83b4fb65d760259e01182dc28b6cf3f2f)
-rw-r--r--libavcodec/bitstream.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/libavcodec/bitstream.c b/libavcodec/bitstream.c
index 53a2db7451..3a58661375 100644
--- a/libavcodec/bitstream.c
+++ b/libavcodec/bitstream.c
@@ -129,7 +129,7 @@ static int alloc_table(VLC *vlc, int size, int use_static)
typedef struct VLCcode {
uint8_t bits;
- uint16_t symbol;
+ VLC_TYPE symbol;
/** codeword, with the first bit-to-be-read in the msb
* (even if intended for a little-endian bitstream reader) */
uint32_t code;