]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BasePrintLib/PrintLib.c
Fix a bug in print library "%a" should not print anything if the var argument points...
[mirror_edk2.git] / MdePkg / Library / BasePrintLib / PrintLib.c
index 80408a5ba5e5c2602a26a485a56380b081f77dbc..548ec5490f746308c22048eddbc754c9185d9861 100644 (file)
@@ -154,7 +154,7 @@ BasePrintLibVSPrint (
   //\r
   // Get the first character from the format string\r
   //\r
-  FormatCharacter = (*Format | (*(Format + 1) << 8)) & FormatMask;\r
+  FormatCharacter = ((*Format & 0xff) | (*(Format + 1) << 8)) & FormatMask;\r
 \r
   //\r
   // Loop until the end of the format string is reached or the output buffer is full\r
@@ -183,7 +183,7 @@ BasePrintLibVSPrint (
       //\r
       for (Done = FALSE; !Done; ) {\r
         Format += BytesPerFormatCharacter;\r
-        FormatCharacter = (*Format | (*(Format + 1) << 8)) & FormatMask;\r
+        FormatCharacter = ((*Format & 0xff) | (*(Format + 1) << 8)) & FormatMask;\r
         switch (FormatCharacter) {\r
         case '.': \r
           Flags |= PRECISION; \r
@@ -228,7 +228,7 @@ BasePrintLibVSPrint (
           for (Count = 0; ((FormatCharacter >= '0') &&  (FormatCharacter <= '9')); ){\r
             Count = (Count * 10) + FormatCharacter - '0';\r
             Format += BytesPerFormatCharacter;\r
-            FormatCharacter = (*Format | (*(Format + 1) << 8)) & FormatMask;\r
+            FormatCharacter = ((*Format & 0xff) | (*(Format + 1) << 8)) & FormatMask;\r
           }\r
           Format -= BytesPerFormatCharacter;\r
           if ((Flags & PRECISION) == 0) {\r
@@ -355,6 +355,12 @@ BasePrintLibVSPrint (
           Flags &= (~ARGUMENT_UNICODE);\r
           ArgumentString = "<null string>";\r
         }\r
+        //\r
+        // Set the default precision for string to be zero if not specified.\r
+        //\r
+        if ((Flags & PRECISION) == 0) {\r
+          Precision = 0;\r
+        }\r
         break;\r
 \r
       case 'c':\r
@@ -548,7 +554,7 @@ BasePrintLibVSPrint (
     //\r
     // Get the next character from the format string\r
     //\r
-    FormatCharacter = (*Format | (*(Format + 1) << 8)) & FormatMask;\r
+    FormatCharacter = ((*Format & 0xff) | (*(Format + 1) << 8)) & FormatMask;\r
   }\r
 \r
   //\r