EmbeddedPkg/AndroidFastbootApp: fix overflow on fill buf

Fix overflow on fill buffer.

Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
diff --git a/EmbeddedPkg/Application/AndroidFastboot/AndroidFastbootApp.c b/EmbeddedPkg/Application/AndroidFastboot/AndroidFastbootApp.c
index 8495536..5649656 100644
--- a/EmbeddedPkg/Application/AndroidFastboot/AndroidFastbootApp.c
+++ b/EmbeddedPkg/Application/AndroidFastboot/AndroidFastbootApp.c
@@ -180,7 +180,7 @@
   )

 {

   EFI_STATUS        Status = EFI_SUCCESS;

-  UINTN             Chunk, Offset = 0, Index;

+  UINTN             Chunk, Offset = 0, Left, Count;

   VOID             *Image;

   CHUNK_HEADER     *ChunkHeader;

   UINT32            FillBuf[FILL_BUF_SIZE];

@@ -209,20 +209,27 @@
       Offset += ChunkHeader->ChunkSize * SparseHeader->BlockSize;

       break;

     case CHUNK_TYPE_FILL:

-      SetMem32 (FillBuf, FILL_BUF_SIZE * sizeof (UINT32), *(UINT32 *)Image);

-      Image += sizeof (UINT32);

-      for (Index = 0; Index < ChunkHeader->ChunkSize; Index++) {

+      Left = ChunkHeader->ChunkSize * SparseHeader->BlockSize;

+      while (Left > 0) {

+        if (Left > FILL_BUF_SIZE * sizeof (UINT32)) {

+          Count = FILL_BUF_SIZE * sizeof (UINT32);

+        } else {

+          Count = Left;

+        }

+        SetMem32 (FillBuf, Count, *(UINT32 *)Image);

         Status = mPlatform->FlashPartitionEx (

                               PartitionName,

                               Offset,

-                              SparseHeader->BlockSize,

+                              Count,

                               FillBuf

                               );

         if (EFI_ERROR (Status)) {

           return Status;

         }

-        Offset += SparseHeader->BlockSize;

+        Offset += Count;

+        Left = Left - Count;

       }

+      Image += sizeof (UINT32);

       break;

     case CHUNK_TYPE_DONT_CARE:

       Offset += ChunkHeader->ChunkSize * SparseHeader->BlockSize;