]> granicus.if.org Git - libvpx/commitdiff
Fix issue for 0 target bitrate in multi-res build.
authorJerome Jiang <jianj@google.com>
Thu, 25 Jan 2018 19:36:53 +0000 (11:36 -0800)
committerJerome Jiang <jianj@google.com>
Fri, 2 Feb 2018 04:17:54 +0000 (20:17 -0800)
For encoding with --enable-multi-res-encoding, with 1 layer, when the
target bitrate is set 0, under these conditions null pointer
will be de-referenced. Fix is to check
cpi->oxcf.mr_total_resolutions > 1. Also added NULL pointer check.
This issue causes crash for asan build in chromium clusterfuzz.

BUG=805863

Change-Id: I9cd25af631395bc9fede3a12fb68af4021eb15f8

vp8/vp8_cx_iface.c

index 784e8c3594ee18a1af59546ef8bd75c549fabf53..d3e200594100186d7905755c9243c0b57918fde7 100644 (file)
@@ -804,11 +804,15 @@ static vpx_codec_err_t vp8e_encode(vpx_codec_alg_priv_t *ctx,
 
   if (!ctx->cfg.rc_target_bitrate) {
 #if CONFIG_MULTI_RES_ENCODING
-    LOWER_RES_FRAME_INFO *low_res_frame_info =
-        (LOWER_RES_FRAME_INFO *)ctx->cpi->oxcf.mr_low_res_mode_info;
-    low_res_frame_info->skip_encoding_prev_stream = 1;
-    if (ctx->cpi->oxcf.mr_encoder_id == 0)
-      low_res_frame_info->skip_encoding_base_stream = 1;
+    if (!ctx->cpi) return VPX_CODEC_ERROR;
+    if (ctx->cpi->oxcf.mr_total_resolutions > 1) {
+      LOWER_RES_FRAME_INFO *low_res_frame_info =
+          (LOWER_RES_FRAME_INFO *)ctx->cpi->oxcf.mr_low_res_mode_info;
+      if (!low_res_frame_info) return VPX_CODEC_ERROR;
+      low_res_frame_info->skip_encoding_prev_stream = 1;
+      if (ctx->cpi->oxcf.mr_encoder_id == 0)
+        low_res_frame_info->skip_encoding_base_stream = 1;
+    }
 #endif
     return res;
   }