diff options
Diffstat (limited to 'libvpx/vp8/decoder/dboolhuff.c')
-rw-r--r-- | libvpx/vp8/decoder/dboolhuff.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/libvpx/vp8/decoder/dboolhuff.c b/libvpx/vp8/decoder/dboolhuff.c index 9cf74bf85..11099c453 100644 --- a/libvpx/vp8/decoder/dboolhuff.c +++ b/libvpx/vp8/decoder/dboolhuff.c @@ -15,7 +15,13 @@ int vp8dx_start_decode(BOOL_DECODER *br, const unsigned char *source, unsigned int source_sz, vpx_decrypt_cb decrypt_cb, void *decrypt_state) { - br->user_buffer_end = source + source_sz; + if (source_sz && !source) return 1; + + // To simplify calling code this fuction can be called with |source| == null + // and |source_sz| == 0. This and vp8dx_bool_decoder_fill() are essentially + // no-ops in this case. + // Work around a ubsan warning with a ternary to avoid adding 0 to null. + br->user_buffer_end = source ? source + source_sz : source; br->user_buffer = source; br->value = 0; br->count = -8; @@ -23,8 +29,6 @@ int vp8dx_start_decode(BOOL_DECODER *br, const unsigned char *source, br->decrypt_cb = decrypt_cb; br->decrypt_state = decrypt_state; - if (source_sz && !source) return 1; - /* Populate the buffer */ vp8dx_bool_decoder_fill(br); |