changeset 11232:7f75cd2bf32e libavcodec

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.
author mru
date Sun, 21 Feb 2010 15:11:57 +0000
parents 0fc1cdd984b7
children 2d49996fe7d1
files bitstream.c
diffstat 1 files changed, 3 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/bitstream.c	Sun Feb 21 13:28:46 2010 +0000
+++ b/bitstream.c	Sun Feb 21 15:11:57 2010 +0000
@@ -158,11 +158,12 @@
 #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 @@
                 table[j][1] = -n1; //bits
             }
         }
+        }
     }
 
     /* second pass : fill auxillary tables recursively */