Commit 4c4e7465 authored by Måns Rullgård's avatar Måns Rullgård
Browse files

Avoid negative shifts in build_table()

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.

Originally committed as revision 21939 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 044a950d
......@@ -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 */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment