]> granicus.if.org Git - libvpx/commitdiff
Fixing undefined behavior vp9_peek_si().
authorDmitry Kovalev <dkovalev@google.com>
Fri, 7 Feb 2014 22:21:19 +0000 (14:21 -0800)
committerDmitry Kovalev <dkovalev@google.com>
Fri, 7 Feb 2014 22:21:19 +0000 (14:21 -0800)
Bitwise OR operation doesn't guarantee any subexpression evaluation order.
Just reading one bit now and ignoring the next one. For reference look at
vp9_decode_frame() implementation.

Change-Id: I4971686929838ae5ded8f43a38a2934db5e1d462

vp9/vp9_dx_iface.c

index 92c6cd20cc4ffce40f0a098fba65eb6c6fb1eff5..0e19b0c485b969d57766f9b40ce82ee46d8f3831 100644 (file)
@@ -148,7 +148,9 @@ static vpx_codec_err_t vp9_peek_si(const uint8_t *data, unsigned int data_sz,
   {
     struct vp9_read_bit_buffer rb = { data, data + data_sz, 0, NULL, NULL };
     const int frame_marker = vp9_rb_read_literal(&rb, 2);
-    const int version = vp9_rb_read_bit(&rb) | (vp9_rb_read_bit(&rb) << 1);
+    const int version = vp9_rb_read_bit(&rb);
+    (void) vp9_rb_read_bit(&rb);  // unused version bit
+
     if (frame_marker != VP9_FRAME_MARKER)
       return VPX_CODEC_UNSUP_BITSTREAM;
 #if CONFIG_NON420