Mercurial > libavutil.hg
changeset 741:63e3c82b92d9 libavutil
Fix cast of byte buffer to uint32 that was disregarding alignment
requirements.
Now calculates crc byte at a time until aligned, then continues with uint32
optimized calculation.
This fixes crashes during mlp decoding on sparc (at least, maybe others).
author | heydowns |
---|---|
date | Fri, 12 Jun 2009 02:13:12 +0000 |
parents | ba8654776eab |
children | 1091b120412e |
files | crc.c |
diffstat | 1 files changed, 5 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/crc.c Thu Jun 11 10:16:51 2009 +0000 +++ b/crc.c Fri Jun 12 02:13:12 2009 +0000 @@ -115,7 +115,10 @@ const uint8_t *end= buffer+length; #if !CONFIG_SMALL - if(!ctx[256]) + if(!ctx[256]) { + while(((intptr_t) buffer & 3) && buffer < end) + crc = ctx[((uint8_t)crc) ^ *buffer++] ^ (crc >> 8); + while(buffer<end-3){ crc ^= le2me_32(*(const uint32_t*)buffer); buffer+=4; crc = ctx[3*256 + ( crc &0xFF)] @@ -123,6 +126,7 @@ ^ctx[1*256 + ((crc>>16)&0xFF)] ^ctx[0*256 + ((crc>>24) )]; } + } #endif while(buffer<end) crc = ctx[((uint8_t)crc) ^ *buffer++] ^ (crc >> 8);