summaryrefslogtreecommitdiff
path: root/libavcodec/bitstream.c
diff options
context:
space:
mode:
authorMåns Rullgård <mans@mansr.com>2009-07-01 17:48:22 +0000
committerMåns Rullgård <mans@mansr.com>2009-07-01 17:48:22 +0000
commitec62d942ea73d98ee2760746884779d7e0ccb6d3 (patch)
tree70cf10800671c65573015da7518ecef9df8a7a6d /libavcodec/bitstream.c
parentf7f1eb6cc9ce3e22dc48d20191eedc10008d878f (diff)
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
Diffstat (limited to 'libavcodec/bitstream.c')
-rw-r--r--libavcodec/bitstream.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/libavcodec/bitstream.c b/libavcodec/bitstream.c
index efb5a3bfdb..3706f43124 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 */