[SCM] libav/experimental: Fix potentially unaligned accesses in ff_copy_bits()

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:48:28 UTC 2013


The following commit has been merged in the experimental branch:
commit ec62d942ea73d98ee2760746884779d7e0ccb6d3
Author: Måns Rullgård <mans at mansr.com>
Date:   Wed Jul 1 17:48:22 2009 +0000

    Fix potentially unaligned accesses in ff_copy_bits()
    
    A pointer should never be assigned a value which may have less than the
    required alignment of the target type.  Compilers may assume pointer
    values have the required alignment, and emit normal load/store instructions.
    
    Unaligned pointers should use a character type or compiler-specific
    type modifiers.
    
    Originally committed as revision 19318 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/bitstream.c b/libavcodec/bitstream.c
index efb5a3b..3706f43 100644
--- a/libavcodec/bitstream.c
+++ b/libavcodec/bitstream.c
@@ -78,7 +78,6 @@ void ff_put_string(PutBitContext * pbc, const char *s, int terminate_string)
 
 void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length)
 {
-    const uint16_t *srcw= (const uint16_t*)src;
     int words= length>>4;
     int bits= length&15;
     int i;
@@ -86,7 +85,7 @@ void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length)
     if(length==0) return;
 
     if(CONFIG_SMALL || words < 16 || put_bits_count(pb)&7){
-        for(i=0; i<words; i++) put_bits(pb, 16, AV_RB16(&srcw[i]));
+        for(i=0; i<words; i++) put_bits(pb, 16, AV_RB16(src + 2*i));
     }else{
         for(i=0; put_bits_count(pb)&31; i++)
             put_bits(pb, 8, src[i]);
@@ -95,7 +94,7 @@ void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length)
         skip_put_bytes(pb, 2*words-i);
     }
 
-    put_bits(pb, bits, AV_RB16(&srcw[words])>>(16-bits));
+    put_bits(pb, bits, AV_RB16(src + 2*words)>>(16-bits));
 }
 
 /* VLC decoding */

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list