summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTristan Matthews <tmatth@videolan.org>2019-03-06 15:37:52 -0500
committerTristan Matthews <tmatth@videolan.org>2019-03-06 16:15:06 -0500
commitf61c6e56258b6c2aed9597bc0f6911f35158db2b (patch)
treee11106ac1c41a99a339343bbb096a5d3a7e63804 /src
parentd9089e3710893fdb3a9ea8de2a9ca2cb901954c0 (diff)
downloadogg-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.c22
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]^