Fix CompositeBuffers()

Avoid a division by dest_alpha=0 when fg and bg are both fully
transparent.

Change-Id: I0620e2f1d162759b3c38421e8a921a98c446143a
Reviewed-on: https://chromium-review.googlesource.com/c/codecs/libwebp2/+/7067278
Reviewed-by: James Zern <jzern@google.com>
Tested-by: WebM Builds <builds@webmproject.org>
diff --git a/src/utils/argb_buffer.cc b/src/utils/argb_buffer.cc
index 01da4c6..4f74869 100644
--- a/src/utils/argb_buffer.cc
+++ b/src/utils/argb_buffer.cc
@@ -368,14 +368,20 @@
       for (uint32_t x = 0; x < w.width; ++x) {
         const uint8_t b = kAlphaMax - fg_row[4 * x + 0];  // ~ 255 * (1-alpha)
         const uint8_t fg_alpha = fg_row[4 * x + 0];
-        const uint8_t bg_alpha = bg_row[4 * x + 0];
-        const uint8_t dest_alpha = fg_alpha + DivBy255(b * bg_row[4 * x + 0]);
-        dest_row[4 * x + 0] = dest_alpha;
-        for (uint32_t c = 1; c < 4; ++c) {
-          dest_row[4 * x + c] =
-              DivRound<int32_t>(fg_row[4 * x + c] * fg_alpha +
-                                    DivBy255(b * bg_row[4 * x + c] * bg_alpha),
-                                dest_alpha);
+        if (fg_alpha == 0) {
+          for (uint32_t c = 0; c < 4; ++c) {
+            dest_row[4 * x + c] = bg_row[4 * x + c];
+          }
+        } else {
+          const uint8_t bg_alpha = bg_row[4 * x + 0];
+          const uint8_t dest_alpha = fg_alpha + DivBy255(b * bg_row[4 * x + 0]);
+          dest_row[4 * x + 0] = dest_alpha;
+          for (uint32_t c = 1; c < 4; ++c) {
+            dest_row[4 * x + c] = DivRound<int32_t>(
+                fg_row[4 * x + c] * fg_alpha +
+                    DivBy255(b * bg_row[4 * x + c] * bg_alpha),
+                dest_alpha);
+          }
         }
       }
     }