film-grain: fix buffer overflow

When bit_depth is 8 the copy_rect function was setting the size to
2 bytes per sample. This causes a buffer overflow as each line copied
in the loop is twice the number of bytes it should be and the last
line writes off the end of the buffer.

BUG=aomedia:1389

Change-Id: Ib9fa11d1dd13806dedbce2cd47dd8d562007428d
diff --git a/aom_dsp/grain_synthesis.c b/aom_dsp/grain_synthesis.c
index 78e7e30..cd6cbf0 100644
--- a/aom_dsp/grain_synthesis.c
+++ b/aom_dsp/grain_synthesis.c
@@ -757,8 +757,8 @@
 
 static void copy_rect(uint8_t *src, int src_stride, uint8_t *dst,
                       int dst_stride, int width, int height,
-                      int high_bit_depth) {
-  int hbd_coeff = high_bit_depth ? 2 : 0;
+                      int use_high_bit_depth) {
+  int hbd_coeff = use_high_bit_depth ? 2 : 1;
   while (height) {
     memcpy(dst, src, width * sizeof(uint8_t) * hbd_coeff);
     src += src_stride;
@@ -781,17 +781,23 @@
   dst->r_w = src->r_w;
   dst->r_h = src->r_h;
 
+  int use_high_bit_depth = 0;
+
+  if (dst->fmt == AOM_IMG_FMT_I42016) {
+    use_high_bit_depth = 1;
+  }
+
   copy_rect(src->planes[AOM_PLANE_Y], src->stride[AOM_PLANE_Y],
             dst->planes[AOM_PLANE_Y], dst->stride[AOM_PLANE_Y], dst->d_w,
-            dst->d_h, src->bit_depth);
+            dst->d_h, use_high_bit_depth);
 
   copy_rect(src->planes[AOM_PLANE_U], src->stride[AOM_PLANE_U],
             dst->planes[AOM_PLANE_U], dst->stride[AOM_PLANE_U], dst->d_w / 2,
-            dst->d_h / 2, src->bit_depth);
+            dst->d_h / 2, use_high_bit_depth);
 
   copy_rect(src->planes[AOM_PLANE_V], src->stride[AOM_PLANE_V],
             dst->planes[AOM_PLANE_V], dst->stride[AOM_PLANE_V], dst->d_w / 2,
-            dst->d_h / 2, src->bit_depth);
+            dst->d_h / 2, use_high_bit_depth);
 
   luma = dst->planes[AOM_PLANE_Y];
   cb = dst->planes[AOM_PLANE_U];
@@ -805,12 +811,6 @@
   height = dst->d_h;
   params->bit_depth = dst->bit_depth;
 
-  int use_high_bit_depth = 0;
-
-  if (dst->fmt == AOM_IMG_FMT_I42016) {
-    use_high_bit_depth = 1;
-  }
-
   av1_add_film_grain_run(params, luma, cb, cr, height, width, luma_stride,
                          chroma_stride, use_high_bit_depth);
   return;