aboutsummaryrefslogtreecommitdiff
path: root/libvpx/vp8/decoder/dboolhuff.c
diff options
context:
space:
mode:
Diffstat (limited to 'libvpx/vp8/decoder/dboolhuff.c')
-rw-r--r--libvpx/vp8/decoder/dboolhuff.c10
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);