Return error if worker is not initialized Avoid reference to uninitialized member variables. BUG=aomedia:503691210 Change-Id: I86d5c9963afea212c200a848dfe56b9d027e291e
diff --git a/av1/av1_dx_iface.c b/av1/av1_dx_iface.c index cd41f8c..3fbe5e5 100644 --- a/av1/av1_dx_iface.c +++ b/av1/av1_dx_iface.c
@@ -950,6 +950,7 @@ av1_ref_frame_t *const frame = data; YV12_BUFFER_CONFIG sd; AVxWorker *const worker = ctx->frame_worker; + if (worker == NULL) return AOM_CODEC_ERROR; FrameWorkerData *const frame_worker_data = (FrameWorkerData *)worker->data1; image2yuvconfig(&frame->img, &sd); @@ -975,6 +976,7 @@ if (frame) { YV12_BUFFER_CONFIG sd; AVxWorker *const worker = ctx->frame_worker; + if (worker == NULL) return AOM_CODEC_ERROR; FrameWorkerData *const frame_worker_data = (FrameWorkerData *)worker->data1; image2yuvconfig(&frame->img, &sd); return av1_copy_reference_dec(frame_worker_data->pbi, frame->idx, &sd); @@ -989,6 +991,7 @@ if (data) { YV12_BUFFER_CONFIG *fb; AVxWorker *const worker = ctx->frame_worker; + if (worker == NULL) return AOM_CODEC_ERROR; FrameWorkerData *const frame_worker_data = (FrameWorkerData *)worker->data1; fb = get_ref_frame(&frame_worker_data->pbi->common, data->idx); if (fb == NULL) return AOM_CODEC_ERROR; @@ -1005,6 +1008,7 @@ if (new_img) { YV12_BUFFER_CONFIG new_frame; AVxWorker *const worker = ctx->frame_worker; + if (worker == NULL) return AOM_CODEC_ERROR; FrameWorkerData *const frame_worker_data = (FrameWorkerData *)worker->data1; if (av1_get_frame_to_show(frame_worker_data->pbi, &new_frame) == 0) { @@ -1024,6 +1028,7 @@ if (img) { YV12_BUFFER_CONFIG new_frame; AVxWorker *const worker = ctx->frame_worker; + if (worker == NULL) return AOM_CODEC_ERROR; FrameWorkerData *const frame_worker_data = (FrameWorkerData *)worker->data1; if (av1_get_frame_to_show(frame_worker_data->pbi, &new_frame) == 0) {
diff --git a/test/decode_api_test.cc b/test/decode_api_test.cc index f504be0..ca17433 100644 --- a/test/decode_api_test.cc +++ b/test/decode_api_test.cc
@@ -59,4 +59,25 @@ EXPECT_EQ(AOM_CODEC_OK, aom_codec_destroy(&dec)); } +TEST(DecodeAPI, Buganizer503691210) { + aom_codec_iface_t *iface = aom_codec_av1_dx(); + aom_codec_ctx_t dec; + aom_codec_dec_cfg_t cfg = { 1, 424, 144, 1 }; + EXPECT_EQ(AOM_CODEC_OK, aom_codec_dec_init(&dec, iface, &cfg, 0)); + + av1_ref_frame_t ref; + ref.idx = 0; + // These control calls should fail with AOM_CODEC_ERROR because the decoder + // is not fully initialized yet (no frames decoded). + EXPECT_EQ(AOM_CODEC_ERROR, aom_codec_control(&dec, AV1_GET_REFERENCE, &ref)); + EXPECT_EQ(AOM_CODEC_ERROR, aom_codec_control(&dec, AV1_SET_REFERENCE, &ref)); + EXPECT_EQ(AOM_CODEC_ERROR, aom_codec_control(&dec, AV1_COPY_REFERENCE, &ref)); + + aom_image_t img; + EXPECT_EQ(AOM_CODEC_ERROR, + aom_codec_control(&dec, AV1_COPY_NEW_FRAME_IMAGE, &img)); + + EXPECT_EQ(AOM_CODEC_OK, aom_codec_destroy(&dec)); +} + } // namespace