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