From: Yaowu Xu Date: Tue, 31 May 2016 23:41:49 +0000 (-0700) Subject: Fix VP8 encoder UBSAN/IOC errors X-Git-Tag: v1.6.0~101 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=787b38ebb964be883088450eaa17a002d97cd2e1;p=platform%2Fupstream%2Flibvpx.git Fix VP8 encoder UBSAN/IOC errors 1. vp8/decoder/dboolhuff.c 2. vp8/decoder/dboolhuff.h 3. vp8/encoder/bitstream.c 4. vp8/encoder/boolhuff.h 5. vp8/encoder/rdopt.c BUG=https://bugs.chromium.org/p/webm/issues/detail?id=1218 Change-Id: I5d315d63fd7aeaee6f3bd79178e593f3db38a6b1 --- diff --git a/vp8/decoder/dboolhuff.c b/vp8/decoder/dboolhuff.c index 8a7e332..5cdd2a2 100644 --- a/vp8/decoder/dboolhuff.c +++ b/vp8/decoder/dboolhuff.c @@ -44,7 +44,7 @@ void vp8dx_bool_decoder_fill(BOOL_DECODER *br) int shift = VP8_BD_VALUE_SIZE - CHAR_BIT - (count + CHAR_BIT); size_t bytes_left = br->user_buffer_end - bufptr; size_t bits_left = bytes_left * CHAR_BIT; - int x = (int)(shift + CHAR_BIT - bits_left); + int x = shift + CHAR_BIT - (int)bits_left; int loop_end = 0; unsigned char decrypted[sizeof(VP8_BD_VALUE) + 1]; diff --git a/vp8/decoder/dboolhuff.h b/vp8/decoder/dboolhuff.h index cc9eaaf..1b1bbf8 100644 --- a/vp8/decoder/dboolhuff.h +++ b/vp8/decoder/dboolhuff.h @@ -83,7 +83,7 @@ static int vp8dx_decode_bool(BOOL_DECODER *br, int probability) { } { - register unsigned int shift = vp8_norm[range]; + register int shift = vp8_norm[range]; range <<= shift; value <<= shift; count -= shift; diff --git a/vp8/encoder/bitstream.c b/vp8/encoder/bitstream.c index f3d91b5..3196422 100644 --- a/vp8/encoder/bitstream.c +++ b/vp8/encoder/bitstream.c @@ -163,7 +163,7 @@ void vp8_pack_tokens(vp8_writer *w, const TOKENEXTRA *p, int xcount) { const TOKENEXTRA *stop = p + xcount; unsigned int split; - unsigned int shift; + int shift; int count = w->count; unsigned int range = w->range; unsigned int lowvalue = w->lowvalue; diff --git a/vp8/encoder/boolhuff.h b/vp8/encoder/boolhuff.h index 7c012a8..e66a2db 100644 --- a/vp8/encoder/boolhuff.h +++ b/vp8/encoder/boolhuff.h @@ -65,7 +65,7 @@ static void vp8_encode_bool(BOOL_CODER *br, int bit, int probability) int count = br->count; unsigned int range = br->range; unsigned int lowvalue = br->lowvalue; - register unsigned int shift; + register int shift; #ifdef VP8_ENTROPY_STATS #if defined(SECTIONBITS_OUTPUT) diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c index 9063cea..6507ae9 100644 --- a/vp8/encoder/rdopt.c +++ b/vp8/encoder/rdopt.c @@ -1899,7 +1899,8 @@ static int calculate_final_rd_costs(int this_rd, int prob_skip_cost; prob_skip_cost = vp8_cost_bit(cpi->prob_skip_false, 1); - prob_skip_cost -= vp8_cost_bit(cpi->prob_skip_false, 0); + prob_skip_cost -= + (int)vp8_cost_bit(cpi->prob_skip_false, 0); rd->rate2 += prob_skip_cost; *other_cost += prob_skip_cost; }