]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.c
Remove volatile for local Index, and Use Memory library functions to fix the referenc...
[mirror_edk2.git] / MdePkg / Library / BaseUefiDecompressLib / BaseUefiDecompressLib.c
index a4b271ba04855fd5a10b8001f1849f29739fae2d..840ea5f2c17d98d3dd64cbeba98f28a4d61d8302 100644 (file)
 \r
 \r
 #include <Base.h>\r
-\r
-\r
 #include <Library/BaseLib.h>\r
-#include <Library/UefiDecompressLib.h>\r
 #include <Library/DebugLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/UefiDecompressLib.h>\r
 \r
 #include "BaseUefiDecompressLibInternals.h"\r
 \r
@@ -142,7 +141,7 @@ MakeTable (
   UINT16  Start[18];\r
   UINT16  *Pointer;\r
   UINT16  Index3;\r
-  volatile UINT16  Index;\r
+  UINT16  Index;\r
   UINT16  Len;\r
   UINT16  Char;\r
   UINT16  JuBits;\r
@@ -153,15 +152,15 @@ MakeTable (
   UINT16  WordOfCount;\r
 \r
 \r
-  for (Index = 1; Index <= 16; Index++) {\r
+  for (Index = 0; Index <= 16; Index++) {\r
     Count[Index] = 0;\r
   }\r
 \r
   for (Index = 0; Index < NumOfChar; Index++) {\r
-    ASSERT (BitLen[Index] != 0);\r
     Count[BitLen[Index]]++;\r
   }\r
-\r
+  \r
+  Start[0] = 0;\r
   Start[1] = 0;\r
 \r
   for (Index = 1; Index <= 16; Index++) {\r
@@ -176,7 +175,8 @@ MakeTable (
   }\r
 \r
   JuBits = (UINT16) (16 - TableBits);\r
-\r
+  \r
+  Weight[0] = 0;\r
   for (Index = 1; Index <= TableBits; Index++) {\r
     Start[Index] >>= JuBits;\r
     Weight[Index] = (UINT16) (1U << (TableBits - Index));\r
@@ -191,8 +191,8 @@ MakeTable (
 \r
   if (Index != 0) {\r
     Index3 = (UINT16) (1U << TableBits);\r
-    while (Index != Index3) {\r
-      Table[Index++] = 0;\r
+    if (Index < Index3) {\r
+      SetMem16 (Table + Index, (Index3 - Index) * sizeof (*Table), 0);\r
     }\r
   }\r
 \r
@@ -202,7 +202,7 @@ MakeTable (
   for (Char = 0; Char < NumOfChar; Char++) {\r
 \r
     Len = BitLen[Char];\r
-    if (Len == 0) {\r
+    if (Len == 0 || Len >= 17) {\r
       continue;\r
     }\r
 \r
@@ -222,7 +222,7 @@ MakeTable (
 \r
       while (Index != 0) {\r
         if (*Pointer == 0) {\r
-          Sd->mRight[Avail]                     = Sd->mLeft[Avail] = 0;\r
+          Sd->mRight[Avail] = Sd->mLeft[Avail] = 0;\r
           *Pointer = Avail++;\r
         }\r
 \r
@@ -321,7 +321,7 @@ ReadPTLen (
 {\r
   UINT16  Number;\r
   UINT16  CharC;\r
-  volatile UINT16  Index;\r
+  UINT16  Index;\r
   UINT32  Mask;\r
 \r
   //\r
@@ -339,16 +339,14 @@ ReadPTLen (
       Sd->mPTTable[Index] = CharC;\r
     }\r
 \r
-    for (Index = 0; Index < nn; Index++) {\r
-      Sd->mPTLen[Index] = 0;\r
-    }\r
+    SetMem (Sd->mPTLen, nn, 0);\r
 \r
     return 0;\r
   }\r
 \r
   Index = 0;\r
 \r
-  while (Index < Number) {\r
+  while (Index < Number && Index < NPT) {\r
 \r
     CharC = (UINT16) (Sd->mBitBuf >> (BITBUFSIZ - 3));\r
 \r
@@ -383,7 +381,7 @@ ReadPTLen (
     }\r
   }\r
 \r
-  while (Index < nn) {\r
+  while (Index < nn && Index < NPT) {\r
     Sd->mPTLen[Index++] = 0;\r
   }\r
   \r
@@ -406,7 +404,7 @@ ReadCLen (
 {\r
   UINT16           Number;\r
   UINT16           CharC;\r
-  volatile UINT16  Index;\r
+  UINT16           Index;\r
   UINT32           Mask;\r
 \r
   Number = (UINT16) GetBits (Sd, CBIT);\r
@@ -417,9 +415,7 @@ ReadCLen (
     //\r
     CharC = (UINT16) GetBits (Sd, CBIT);\r
 \r
-    for (Index = 0; Index < NC; Index++) {\r
-      Sd->mCLen[Index] = 0;\r
-    }\r
+    SetMem (Sd->mCLen, NC, 0);\r
 \r
     for (Index = 0; Index < 4096; Index++) {\r
       Sd->mCTable[Index] = CharC;\r
@@ -429,7 +425,7 @@ ReadCLen (
   }\r
 \r
   Index = 0;\r
-  while (Index < Number) {\r
+  while (Index < Number && Index < NC) {\r
     CharC = Sd->mPTTable[Sd->mBitBuf >> (BITBUFSIZ - 8)];\r
     if (CharC >= NT) {\r
       Mask = 1U << (BITBUFSIZ - 1 - 8);\r
@@ -472,9 +468,7 @@ ReadCLen (
     }\r
   }\r
 \r
-  while (Index < NC) {\r
-    Sd->mCLen[Index++] = 0;\r
-  }\r
+  SetMem (Sd->mCLen + Index, NC - Index, 0);\r
 \r
   MakeTable (Sd, NC, Sd->mCLen, 12, Sd->mCTable);\r
 \r
@@ -742,7 +736,6 @@ UefiDecompress (
   IN OUT VOID    *Scratch  OPTIONAL\r
   )\r
 {\r
-  volatile UINT32  Index;\r
   UINT32           CompSize;\r
   UINT32           OrigSize;\r
   SCRATCH_DATA     *Sd;\r
@@ -769,10 +762,8 @@ UefiDecompress (
   }\r
 \r
   Src = Src + 8;\r
+  SetMem (Sd, sizeof (SCRATCH_DATA), 0);\r
 \r
-  for (Index = 0; Index < sizeof (SCRATCH_DATA); Index++) {\r
-    ((UINT8 *) Sd)[Index] = 0;\r
-  }\r
   //\r
   // The length of the field 'Position Set Code Length Array Size' in Block Header.\r
   // For UEFI 2.0 de/compression algorithm(Version 1), mPBit = 4\r