]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/UefiLib/UefiLibPrint.c
MdePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdePkg / Library / UefiLib / UefiLibPrint.c
index 9f52e7d0ceb8193c7403f572a7090869a53b3d66..ae3a94eb0ca07ac938918e45266d23488d14abeb 100644 (file)
@@ -2,14 +2,8 @@
   Mde UEFI library API implementation.\r
   Print to StdErr or ConOut defined in EFI_SYSTEM_TABLE\r
 \r
-  Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php.\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -90,23 +84,23 @@ InternalPrint (
   return Return;\r
 }\r
 \r
-/** \r
-  Prints a formatted Unicode string to the console output device specified by \r
+/**\r
+  Prints a formatted Unicode string to the console output device specified by\r
   ConOut defined in the EFI_SYSTEM_TABLE.\r
 \r
-  This function prints a formatted Unicode string to the console output device \r
-  specified by ConOut in EFI_SYSTEM_TABLE and returns the number of Unicode \r
-  characters that printed to ConOut.  If the length of the formatted Unicode \r
-  string is greater than PcdUefiLibMaxPrintBufferSize, then only the first \r
+  This function prints a formatted Unicode string to the console output device\r
+  specified by ConOut in EFI_SYSTEM_TABLE and returns the number of Unicode\r
+  characters that printed to ConOut.  If the length of the formatted Unicode\r
+  string is greater than PcdUefiLibMaxPrintBufferSize, then only the first\r
   PcdUefiLibMaxPrintBufferSize characters are sent to ConOut.\r
   If Format is NULL, then ASSERT().\r
   If Format is not aligned on a 16-bit boundary, then ASSERT().\r
   If gST->ConOut is NULL, then ASSERT().\r
 \r
   @param Format   A Null-terminated Unicode format string.\r
-  @param ...      A Variable argument list whose contents are accessed based \r
+  @param ...      A Variable argument list whose contents are accessed based\r
                   on the format string specified by Format.\r
-  \r
+\r
   @return The number of Unicode characters printed to ConOut.\r
 \r
 **/\r
@@ -129,23 +123,23 @@ Print (
   return Return;\r
 }\r
 \r
-/** \r
-  Prints a formatted Unicode string to the console output device specified by \r
+/**\r
+  Prints a formatted Unicode string to the console output device specified by\r
   StdErr defined in the EFI_SYSTEM_TABLE.\r
 \r
-  This function prints a formatted Unicode string to the console output device \r
-  specified by StdErr in EFI_SYSTEM_TABLE and returns the number of Unicode \r
-  characters that printed to StdErr.  If the length of the formatted Unicode \r
-  string is greater than PcdUefiLibMaxPrintBufferSize, then only the first \r
+  This function prints a formatted Unicode string to the console output device\r
+  specified by StdErr in EFI_SYSTEM_TABLE and returns the number of Unicode\r
+  characters that printed to StdErr.  If the length of the formatted Unicode\r
+  string is greater than PcdUefiLibMaxPrintBufferSize, then only the first\r
   PcdUefiLibMaxPrintBufferSize characters are sent to StdErr.\r
   If Format is NULL, then ASSERT().\r
   If Format is not aligned on a 16-bit boundary, then ASSERT().\r
   If gST->StdErr is NULL, then ASSERT().\r
 \r
   @param Format   A Null-terminated Unicode format string.\r
-  @param ...      Variable argument list whose contents are accessed based \r
+  @param ...      Variable argument list whose contents are accessed based\r
                   on the format string specified by Format.\r
-  \r
+\r
   @return The number of Unicode characters printed to StdErr.\r
 \r
 **/\r
@@ -225,22 +219,22 @@ AsciiInternalPrint (
   return Return;\r
 }\r
 \r
-/** \r
-  Prints a formatted ASCII string to the console output device specified by \r
+/**\r
+  Prints a formatted ASCII string to the console output device specified by\r
   ConOut defined in the EFI_SYSTEM_TABLE.\r
 \r
-  This function prints a formatted ASCII string to the console output device \r
-  specified by ConOut in EFI_SYSTEM_TABLE and returns the number of ASCII \r
-  characters that printed to ConOut.  If the length of the formatted ASCII \r
-  string is greater than PcdUefiLibMaxPrintBufferSize, then only the first \r
+  This function prints a formatted ASCII string to the console output device\r
+  specified by ConOut in EFI_SYSTEM_TABLE and returns the number of ASCII\r
+  characters that printed to ConOut.  If the length of the formatted ASCII\r
+  string is greater than PcdUefiLibMaxPrintBufferSize, then only the first\r
   PcdUefiLibMaxPrintBufferSize characters are sent to ConOut.\r
   If Format is NULL, then ASSERT().\r
   If gST->ConOut is NULL, then ASSERT().\r
 \r
   @param Format   A Null-terminated ASCII format string.\r
-  @param ...      Variable argument list whose contents are accessed based \r
+  @param ...      Variable argument list whose contents are accessed based\r
                   on the format string specified by Format.\r
-  \r
+\r
   @return The number of ASCII characters printed to ConOut.\r
 \r
 **/\r
@@ -264,22 +258,22 @@ AsciiPrint (
   return Return;\r
 }\r
 \r
-/** \r
-  Prints a formatted ASCII string to the console output device specified by \r
+/**\r
+  Prints a formatted ASCII string to the console output device specified by\r
   StdErr defined in the EFI_SYSTEM_TABLE.\r
 \r
-  This function prints a formatted ASCII string to the console output device \r
-  specified by StdErr in EFI_SYSTEM_TABLE and returns the number of ASCII \r
-  characters that printed to StdErr.  If the length of the formatted ASCII \r
-  string is greater than PcdUefiLibMaxPrintBufferSize, then only the first \r
+  This function prints a formatted ASCII string to the console output device\r
+  specified by StdErr in EFI_SYSTEM_TABLE and returns the number of ASCII\r
+  characters that printed to StdErr.  If the length of the formatted ASCII\r
+  string is greater than PcdUefiLibMaxPrintBufferSize, then only the first\r
   PcdUefiLibMaxPrintBufferSize characters are sent to StdErr.\r
   If Format is NULL, then ASSERT().\r
   If gST->StdErr is NULL, then ASSERT().\r
 \r
   @param Format   A Null-terminated ASCII format string.\r
-  @param ...      Variable argument list whose contents are accessed based \r
+  @param ...      Variable argument list whose contents are accessed based\r
                   on the format string specified by Format.\r
-  \r
+\r
   @return The number of ASCII characters printed to ConErr.\r
 \r
 **/\r
@@ -371,7 +365,7 @@ InternalPrintGraphic (
   RowInfoArray          = NULL;\r
 \r
   ConsoleHandle = gST->ConsoleOutHandle;\r
-  \r
+\r
   ASSERT( ConsoleHandle != NULL);\r
 \r
   Status = gBS->HandleProtocol (\r
@@ -474,7 +468,14 @@ InternalPrintGraphic (
   } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {\r
     ASSERT (UgaDraw!= NULL);\r
 \r
-    Blt->Image.Bitmap = AllocateZeroPool (Blt->Width * Blt->Height * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));\r
+    //\r
+    // Ensure Width * Height * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL) doesn't overflow.\r
+    //\r
+    if (Blt->Width > DivU64x32 (MAX_UINTN, Blt->Height * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL))) {\r
+      goto Error;\r
+    }\r
+\r
+    Blt->Image.Bitmap = AllocateZeroPool ((UINT32) Blt->Width * Blt->Height * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));\r
     ASSERT (Blt->Image.Bitmap != NULL);\r
 \r
     //\r
@@ -553,24 +554,24 @@ Error:
 }\r
 \r
 /**\r
-  Prints a formatted Unicode string to a graphics console device specified by \r
+  Prints a formatted Unicode string to a graphics console device specified by\r
   ConsoleOutputHandle defined in the EFI_SYSTEM_TABLE at the given (X,Y) coordinates.\r
 \r
-  This function prints a formatted Unicode string to the graphics console device \r
-  specified by ConsoleOutputHandle in EFI_SYSTEM_TABLE and returns the number of \r
-  Unicode characters displayed, not including partial characters that may be clipped \r
+  This function prints a formatted Unicode string to the graphics console device\r
+  specified by ConsoleOutputHandle in EFI_SYSTEM_TABLE and returns the number of\r
+  Unicode characters displayed, not including partial characters that may be clipped\r
   by the right edge of the display.  If the length of the formatted Unicode string is\r
-  greater than PcdUefiLibMaxPrintBufferSize, then at most the first \r
+  greater than PcdUefiLibMaxPrintBufferSize, then at most the first\r
   PcdUefiLibMaxPrintBufferSize characters are printed.The EFI_HII_FONT_PROTOCOL\r
-  StringToImage() service is used to convert the string to a bitmap using the glyphs \r
-  registered with the HII database. No wrapping is performed, so any portions of the \r
-  string the fall outside the active display region will not be displayed. Please see \r
+  StringToImage() service is used to convert the string to a bitmap using the glyphs\r
+  registered with the HII database. No wrapping is performed, so any portions of the\r
+  string the fall outside the active display region will not be displayed. Please see\r
   Section 27.2.6 of the UEFI Specification for a description of the supported string\r
   format including the set of control codes supported by the StringToImage() service.\r
 \r
-  If a graphics console device is not associated with the ConsoleOutputHandle \r
+  If a graphics console device is not associated with the ConsoleOutputHandle\r
   defined in the EFI_SYSTEM_TABLE then no string is printed, and 0 is returned.\r
-  If the EFI_HII_FONT_PROTOCOL is not present in the handle database, then no \r
+  If the EFI_HII_FONT_PROTOCOL is not present in the handle database, then no\r
   string is printed, and 0 is returned.\r
   If Format is NULL, then ASSERT().\r
   If Format is not aligned on a 16-bit boundary, then ASSERT().\r
@@ -583,13 +584,13 @@ Error:
                        then the foreground color of the current ConOut device\r
                        in the EFI_SYSTEM_TABLE is used.\r
   @param  BackGround   The background color of the string being printed.  This is\r
-                       an optional parameter that may be NULL.  If it is NULL, \r
+                       an optional parameter that may be NULL.  If it is NULL,\r
                        then the background color of the current ConOut device\r
                        in the EFI_SYSTEM_TABLE is used.\r
-  @param  Format       A Null-terminated Unicode format string.  See Print Library \r
+  @param  Format       A Null-terminated Unicode format string.  See Print Library\r
                        for the supported format string syntax.\r
-  @param  ...          A Variable argument list whose contents are accessed based on \r
-                       the format string specified by Format.         \r
+  @param  ...          A Variable argument list whose contents are accessed based on\r
+                       the format string specified by Format.\r
 \r
   @return  The number of Unicode characters printed.\r
 \r
@@ -633,24 +634,24 @@ PrintXY (
 }\r
 \r
 /**\r
-  Prints a formatted ASCII string to a graphics console device specified by \r
+  Prints a formatted ASCII string to a graphics console device specified by\r
   ConsoleOutputHandle defined in the EFI_SYSTEM_TABLE at the given (X,Y) coordinates.\r
 \r
-  This function prints a formatted ASCII string to the graphics console device \r
-  specified by ConsoleOutputHandle in EFI_SYSTEM_TABLE and returns the number of \r
-  ASCII characters displayed, not including partial characters that may be clipped \r
+  This function prints a formatted ASCII string to the graphics console device\r
+  specified by ConsoleOutputHandle in EFI_SYSTEM_TABLE and returns the number of\r
+  ASCII characters displayed, not including partial characters that may be clipped\r
   by the right edge of the display.  If the length of the formatted ASCII string is\r
-  greater than PcdUefiLibMaxPrintBufferSize, then at most the first \r
+  greater than PcdUefiLibMaxPrintBufferSize, then at most the first\r
   PcdUefiLibMaxPrintBufferSize characters are printed.The EFI_HII_FONT_PROTOCOL\r
-  StringToImage() service is used to convert the string to a bitmap using the glyphs \r
-  registered with the HII database. No wrapping is performed, so any portions of the \r
-  string the fall outside the active display region will not be displayed. Please see \r
+  StringToImage() service is used to convert the string to a bitmap using the glyphs\r
+  registered with the HII database. No wrapping is performed, so any portions of the\r
+  string the fall outside the active display region will not be displayed. Please see\r
   Section 27.2.6 of the UEFI Specification for a description of the supported string\r
   format including the set of control codes supported by the StringToImage() service.\r
 \r
-  If a graphics console device is not associated with the ConsoleOutputHandle \r
+  If a graphics console device is not associated with the ConsoleOutputHandle\r
   defined in the EFI_SYSTEM_TABLE then no string is printed, and 0 is returned.\r
-  If the EFI_HII_FONT_PROTOCOL is not present in the handle database, then no \r
+  If the EFI_HII_FONT_PROTOCOL is not present in the handle database, then no\r
   string is printed, and 0 is returned.\r
   If Format is NULL, then ASSERT().\r
   If gST->ConsoleOutputHandle is NULL, then ASSERT().\r
@@ -662,13 +663,13 @@ PrintXY (
                        then the foreground color of the current ConOut device\r
                        in the EFI_SYSTEM_TABLE is used.\r
   @param  BackGround   The background color of the string being printed.  This is\r
-                       an optional parameter that may be NULL.  If it is NULL, \r
+                       an optional parameter that may be NULL.  If it is NULL,\r
                        then the background color of the current ConOut device\r
                        in the EFI_SYSTEM_TABLE is used.\r
-  @param  Format       A Null-terminated ASCII format string.  See Print Library \r
+  @param  Format       A Null-terminated ASCII format string.  See Print Library\r
                        for the supported format string syntax.\r
-  @param  ...          Variable argument list whose contents are accessed based on \r
-                       the format string specified by Format.         \r
+  @param  ...          Variable argument list whose contents are accessed based on\r
+                       the format string specified by Format.\r
 \r
   @return  The number of ASCII characters printed.\r
 \r
@@ -710,25 +711,25 @@ AsciiPrintXY (
   return ReturnNum;\r
 }\r
 \r
-/** \r
+/**\r
   Appends a formatted Unicode string to a Null-terminated Unicode string\r
\r
-  This function appends a formatted Unicode string to the Null-terminated \r
+\r
+  This function appends a formatted Unicode string to the Null-terminated\r
   Unicode string specified by String.   String is optional and may be NULL.\r
-  Storage for the formatted Unicode string returned is allocated using \r
+  Storage for the formatted Unicode string returned is allocated using\r
   AllocatePool().  The pointer to the appended string is returned.  The caller\r
   is responsible for freeing the returned string.\r
\r
+\r
   If String is not NULL and not aligned on a 16-bit boundary, then ASSERT().\r
   If FormatString is NULL, then ASSERT().\r
   If FormatString is not aligned on a 16-bit boundary, then ASSERT().\r
\r
+\r
   @param[in] String         A Null-terminated Unicode string.\r
   @param[in] FormatString   A Null-terminated Unicode format string.\r
   @param[in]  Marker        VA_LIST marker for the variable argument list.\r
 \r
   @retval NULL    There was not enough available memory.\r
-  @return         Null-terminated Unicode string is that is the formatted \r
+  @return         Null-terminated Unicode string is that is the formatted\r
                   string appended to String.\r
 **/\r
 CHAR16*\r
@@ -773,27 +774,27 @@ CatVSPrint (
   return (BufferToReturn);\r
 }\r
 \r
-/** \r
+/**\r
   Appends a formatted Unicode string to a Null-terminated Unicode string\r
\r
-  This function appends a formatted Unicode string to the Null-terminated \r
+\r
+  This function appends a formatted Unicode string to the Null-terminated\r
   Unicode string specified by String.   String is optional and may be NULL.\r
-  Storage for the formatted Unicode string returned is allocated using \r
+  Storage for the formatted Unicode string returned is allocated using\r
   AllocatePool().  The pointer to the appended string is returned.  The caller\r
   is responsible for freeing the returned string.\r
\r
+\r
   If String is not NULL and not aligned on a 16-bit boundary, then ASSERT().\r
   If FormatString is NULL, then ASSERT().\r
   If FormatString is not aligned on a 16-bit boundary, then ASSERT().\r
\r
+\r
   @param[in] String         A Null-terminated Unicode string.\r
   @param[in] FormatString   A Null-terminated Unicode format string.\r
-  @param[in] ...            The variable argument list whose contents are \r
-                            accessed based on the format string specified by \r
+  @param[in] ...            The variable argument list whose contents are\r
+                            accessed based on the format string specified by\r
                             FormatString.\r
 \r
   @retval NULL    There was not enough available memory.\r
-  @return         Null-terminated Unicode string is that is the formatted \r
+  @return         Null-terminated Unicode string is that is the formatted\r
                   string appended to String.\r
 **/\r
 CHAR16 *\r