shithub: libvpx

Download patch

ref: 0e213fb999665b382b3937cb7ab1ff2385cd5265
parent: f199bab7ab0cf29bf7a53cd8e10821f200255f7f
author: John Koleszar <jkoleszar@google.com>
date: Wed Oct 3 10:52:56 EDT 2012

fix uninitialized value in multi-res encoding

If a parent mb is available but is intra coded, then parent_ref_mv is
invalid. Check that the parent is inter coded before trying to access
the parent_ref_mv. Previously the parent_ref_mv was being read from
an uninitialized stack allocation, causing potential OOB reads and
other undefined behavior.

Change-Id: I0c93cd412a19c3a184bcf6decaa145b3a036a6c0

--- a/vp8/encoder/pickinter.c
+++ b/vp8/encoder/pickinter.c
@@ -865,7 +865,8 @@
             if (cpi->oxcf.mr_encoder_id && !cpi->mr_low_res_mv_avail)
                 cpi->sf.improved_mv_pred = 0;
 
-            if (cpi->oxcf.mr_encoder_id && cpi->mr_low_res_mv_avail)
+            if (cpi->oxcf.mr_encoder_id && cpi->mr_low_res_mv_avail
+                && parent_ref_frame)
             {
                 /* Use parent MV as predictor. Adjust search range
                  * accordingly.
@@ -911,6 +912,7 @@
 #if CONFIG_MULTI_RES_ENCODING
             if (cpi->oxcf.mr_encoder_id && cpi->mr_low_res_mv_avail &&
                 dissim <= 2 &&
+                parent_ref_frame &&
                 MAX(abs(best_ref_mv.as_mv.row - parent_ref_mv.as_mv.row),
                     abs(best_ref_mv.as_mv.col - parent_ref_mv.as_mv.col)) <= 4)
             {