diff options
author | Tristan Matthews <tmatth@videolan.org> | 2019-03-06 15:37:52 -0500 |
---|---|---|
committer | Tristan Matthews <tmatth@videolan.org> | 2019-03-06 16:15:06 -0500 |
commit | f61c6e56258b6c2aed9597bc0f6911f35158db2b (patch) | |
tree | e11106ac1c41a99a339343bbb096a5d3a7e63804 /src | |
parent | d9089e3710893fdb3a9ea8de2a9ca2cb901954c0 (diff) | |
download | ogg-git-f61c6e56258b6c2aed9597bc0f6911f35158db2b.tar.gz |
framing: cast to unsigned when shifting to fix ubsan errors
Suggested-By Mark Harris
Fixes #2297
Diffstat (limited to 'src')
-rw-r--r-- | src/framing.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/src/framing.c b/src/framing.c index 4f4f363..70b0640 100644 --- a/src/framing.c +++ b/src/framing.c @@ -48,7 +48,7 @@ int ogg_page_eos(const ogg_page *og){ ogg_int64_t ogg_page_granulepos(const ogg_page *og){ unsigned char *page=og->header; - ogg_int64_t granulepos=page[13]&(0xff); + ogg_uint64_t granulepos=page[13]&(0xff); granulepos= (granulepos<<8)|(page[12]&0xff); granulepos= (granulepos<<8)|(page[11]&0xff); granulepos= (granulepos<<8)|(page[10]&0xff); @@ -56,21 +56,21 @@ ogg_int64_t ogg_page_granulepos(const ogg_page *og){ granulepos= (granulepos<<8)|(page[8]&0xff); granulepos= (granulepos<<8)|(page[7]&0xff); granulepos= (granulepos<<8)|(page[6]&0xff); - return(granulepos); + return((ogg_int64_t)granulepos); } int ogg_page_serialno(const ogg_page *og){ - return(og->header[14] | - (og->header[15]<<8) | - (og->header[16]<<16) | - (og->header[17]<<24)); + return((int)((ogg_uint32_t)og->header[14]) | + ((ogg_uint32_t)og->header[15]<<8) | + ((ogg_uint32_t)og->header[16]<<16) | + ((ogg_uint32_t)og->header[17]<<24)); } long ogg_page_pageno(const ogg_page *og){ - return(og->header[18] | - (og->header[19]<<8) | - (og->header[20]<<16) | - (og->header[21]<<24)); + return((long)((ogg_uint32_t)og->header[18]) | + ((ogg_uint32_t)og->header[19]<<8) | + ((ogg_uint32_t)og->header[20]<<16) | + ((ogg_uint32_t)og->header[21]<<24)); } @@ -236,7 +236,7 @@ static int _os_lacing_expand(ogg_stream_state *os,long needed){ static ogg_uint32_t _os_update_crc(ogg_uint32_t crc, unsigned char *buffer, int size){ while (size>=8){ - crc^=buffer[0]<<24|buffer[1]<<16|buffer[2]<<8|buffer[3]; + crc^=((ogg_uint32_t)buffer[0]<<24)|((ogg_uint32_t)buffer[1]<<16)|((ogg_uint32_t)buffer[2]<<8)|((ogg_uint32_t)buffer[3]); crc=crc_lookup[7][ crc>>24 ]^crc_lookup[6][(crc>>16)&0xFF]^ crc_lookup[5][(crc>> 8)&0xFF]^crc_lookup[4][ crc &0xFF]^ |