You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	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
This commit is contained in:
		| @@ -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 */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user