Fix always allocate memory issue.

Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Jaben Carsey <Jaben.carsey@intel.com>

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13706 6f19259b-4bc3-4df7-8a09-765794883524
diff --git a/ShellPkg/Library/UefiShellLib/UefiShellLib.c b/ShellPkg/Library/UefiShellLib/UefiShellLib.c
index 1929349..222bd98 100644
--- a/ShellPkg/Library/UefiShellLib/UefiShellLib.c
+++ b/ShellPkg/Library/UefiShellLib/UefiShellLib.c
@@ -3142,11 +3142,13 @@
   //

   if (CurrentSize != NULL) {

     NewSize = *CurrentSize;

-    while (NewSize < (DestinationStartSize + (Count*sizeof(CHAR16)))) {

-      NewSize += 2 * Count * sizeof(CHAR16);

+    if (NewSize < DestinationStartSize + (Count * sizeof(CHAR16))) {

+      while (NewSize < (DestinationStartSize + (Count*sizeof(CHAR16)))) {

+        NewSize += 2 * Count * sizeof(CHAR16);

+      }

+      *Destination = ReallocatePool(*CurrentSize, NewSize, *Destination);

+      *CurrentSize = NewSize;

     }

-    *Destination = ReallocatePool(*CurrentSize, NewSize, *Destination);

-    *CurrentSize = NewSize;

   } else {

     *Destination = AllocateZeroPool((Count+1)*sizeof(CHAR16));

   }