MdeModulePkg: Add the EFI_PRINT2S_PROTOCOL

Add the EFI_PRINT2S_PROTOCOL as a safe version of the EFI_PRINT2_PROTOCOL,
the EFI_PRINT2S_PROTOCOL replaces the following 2 services in
EFI_PRINT2_PROTOCOL:
UNICODE_VALUE_TO_STRING
ASCII_VALUE_TO_STRING

with:
UNICODE_VALUE_TO_STRING_S
ASCII_VALUE_TO_STRING_S

The 2 new services perform checks to the input parameters and will return
relative status to reflect the check result.

Return RETURN_INVALID_PARAMETER when:
1). The input Buffer is NULL.
2). The input BufferSize is greater than (PcdMaximumUnicodeStringLength *
sizeof (CHAR16) + 1) for UnicodeValueToStringS or greater than
PcdMaximumAsciiStringLength for AsciiValueToStringS.
3). The input Flags is not set properly.
4). The input Width is not smaller than MAXIMUM_VALUE_CHARACTERS.

Return RETURN_BUFFER_TOO_SMALL when:
1). The input BufferSize cannot hold the converted value.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
Hao Wu
2017-02-08 11:20:37 +08:00
parent 51f0ceb4eb
commit e43adbafe8
5 changed files with 175 additions and 13 deletions

View File

@ -1,7 +1,7 @@
/** @file
This driver produces Print2 protocol layered on top of the PrintLib from the MdePkg.
This driver produces Print2 protocols layered on top of the PrintLib from the MdePkg.
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
@ -35,6 +35,19 @@ CONST EFI_PRINT2_PROTOCOL mPrint2Protocol = {
AsciiValueToString
};
CONST EFI_PRINT2S_PROTOCOL mPrint2SProtocol = {
UnicodeBSPrint,
UnicodeSPrint,
UnicodeBSPrintAsciiFormat,
UnicodeSPrintAsciiFormat,
UnicodeValueToStringS,
AsciiBSPrint,
AsciiSPrint,
AsciiBSPrintUnicodeFormat,
AsciiSPrintUnicodeFormat,
AsciiValueToStringS
};
/**
The user Entry Point for Print module.
@ -59,6 +72,7 @@ PrintEntryPoint (
Status = gBS->InstallMultipleProtocolInterfaces (
&mPrintThunkHandle,
&gEfiPrint2ProtocolGuid, &mPrint2Protocol,
&gEfiPrint2SProtocolGuid, &mPrint2SProtocol,
NULL
);
ASSERT_EFI_ERROR (Status);