[FFmpeg-devel] [PATCH] Avoid negative shifts in build_table()
Mans Rullgard
mans
Sun Feb 21 14:48:34 CET 2010
A shift by a negative amount has undefined behaviour. Even though
the result of this shift is never used, the shift itself could
cause an exception of some kind.
---
libavcodec/bitstream.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/libavcodec/bitstream.c b/libavcodec/bitstream.c
index 9002830..7549e7d 100644
--- a/libavcodec/bitstream.c
+++ b/libavcodec/bitstream.c
@@ -158,11 +158,12 @@ static int build_table(VLC *vlc, int table_nb_bits,
#endif
/* if code matches the prefix, it is in the table */
n -= n_prefix;
+ if (n > 0) {
if(flags & INIT_VLC_LE)
code_prefix2= code & (n_prefix>=32 ? 0xffffffff : (1 << n_prefix)-1);
else
code_prefix2= code >> n;
- if (n > 0 && code_prefix2 == code_prefix) {
+ if (code_prefix2 == code_prefix) {
if (n <= table_nb_bits) {
/* no need to add another table */
j = (code << (table_nb_bits - n)) & (table_size - 1);
@@ -196,6 +197,7 @@ static int build_table(VLC *vlc, int table_nb_bits,
table[j][1] = -n1; //bits
}
}
+ }
}
/* second pass : fill auxillary tables recursively */
--
1.7.0
More information about the ffmpeg-devel
mailing list