[SCM] libav/experimental: Avoid negative shifts in build_table()

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 17:00:50 UTC 2013


The following commit has been merged in the experimental branch:
commit 4c4e746566a98340e229831624f74a5636b62b65
Author: Måns Rullgård <mans at mansr.com>
Date:   Sun Feb 21 15:11:57 2010 +0000

    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

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 */

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list