<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:DengXian;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@DengXian";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="blue" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Reviewed-by: Bret Barkelew <bret.barkelew@microsoft.com></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- Bret</p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="border:none;padding:0in"><b>From: </b><a href="mailto:vit9696=protonmail.com@groups.io">Vitaly Cheptsov via groups.io</a><br>
<b>Sent: </b>Tuesday, May 19, 2020 10:56 PM<br>
<b>To: </b><a href="mailto:michael.d.kinney@intel.com">Kinney, Michael D</a>; <a href="mailto:lersek@redhat.com">
Laszlo Ersek</a><br>
<b>Cc: </b><a href="mailto:devel@edk2.groups.io">devel@edk2.groups.io</a>; <a href="mailto:afish@apple.com">
Andrew Fish</a>; <a href="mailto:ard.biesheuvel@linaro.org">Ard Biesheuvel</a>; <a href="mailto:Bret.Barkelew@microsoft.com">
Bret Barkelew</a>; <a href="mailto:brian.johnson@hpe.com">Brian J . Johnson</a>; <a href="mailto:chasel.chiu@intel.com">
Chasel Chiu</a>; <a href="mailto:jordan.l.justen@intel.com">Jordan Justen</a>; <a href="mailto:leif@nuviainc.com">
Leif Lindholm</a>; <a href="mailto:liming.gao@intel.com">liming.gao</a>; <a href="mailto:mhaeuser@outlook.de">
Marvin H?user</a>; <a href="mailto:vincent.zimmer@intel.com">Zimmer, Vincent</a>;
<a href="mailto:zhichao.gao@intel.com">Zhichao Gao</a>; <a href="mailto:jiewen.yao@intel.com">
Yao, Jiewen</a><br>
<b>Subject: </b>[EXTERNAL] Re: [edk2-devel] [Patch v8 1/2] MdePkg: Fix SafeString performing assertions on runtime checks</p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Mike,</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Looks perfect to me. For everyone: the only change from V7 is an addition of DEBUG_VERBOSE message, which can indeed be useful.</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Best wishes,</p>
<p class="MsoNormal">Vitaly</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">> 20 ΝΑΡ 2020 Η., Χ 06:01, Michael D Kinney <michael.d.kinney@intel.com> ΞΑΠΙΣΑΜ(Α):</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2054</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> Runtime checks returned via status return code should not work as</p>
<p class="MsoNormal">> assertions to permit parsing not trusted data with SafeString</p>
<p class="MsoNormal">> interfaces.  Replace ASSERT() with a DEBUG_VERBOSE message.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> Cc: Andrew Fish <afish@apple.com></p>
<p class="MsoNormal">> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org></p>
<p class="MsoNormal">> Cc: Bret Barkelew <bret.barkelew@microsoft.com></p>
<p class="MsoNormal">> Cc: Brian J. Johnson <brian.johnson@hpe.com></p>
<p class="MsoNormal">> Cc: Chasel Chiu <chasel.chiu@intel.com></p>
<p class="MsoNormal">> Cc: Jordan Justen <jordan.l.justen@intel.com></p>
<p class="MsoNormal">> Cc: Laszlo Ersek <lersek@redhat.com></p>
<p class="MsoNormal">> Cc: Leif Lindholm <leif@nuviainc.com></p>
<p class="MsoNormal">> Cc: Liming Gao <liming.gao@intel.com></p>
<p class="MsoNormal">> Cc: Marvin H?user <mhaeuser@outlook.de></p>
<p class="MsoNormal">> Cc: Michael D Kinney <michael.d.kinney@intel.com></p>
<p class="MsoNormal">> Cc: Vincent Zimmer <vincent.zimmer@intel.com></p>
<p class="MsoNormal">> Cc: Zhichao Gao <zhichao.gao@intel.com></p>
<p class="MsoNormal">> Cc: Jiewen Yao <jiewen.yao@intel.com></p>
<p class="MsoNormal">> Signed-off-by: Vitaly Cheptsov <vit9696@protonmail.com></p>
<p class="MsoNormal">> ---</p>
<p class="MsoNormal">> MdePkg/Include/Library/BaseLib.h    | 111 ---------------------------</p>
<p class="MsoNormal">> MdePkg/Library/BaseLib/SafeString.c | 115 +---------------------------</p>
<p class="MsoNormal">> 2 files changed, 3 insertions(+), 223 deletions(-)</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> diff --git a/MdePkg/Include/Library/BaseLib.h b/MdePkg/Include/Library/BaseLib.h</p>
<p class="MsoNormal">> index b0bbe8cef8..8e7b87cbda 100644</p>
<p class="MsoNormal">> --- a/MdePkg/Include/Library/BaseLib.h</p>
<p class="MsoNormal">> +++ b/MdePkg/Include/Library/BaseLib.h</p>
<p class="MsoNormal">> @@ -216,7 +216,6 @@ StrnSizeS (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If Destination is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">>   If Source is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> @@ -252,7 +251,6 @@ StrCpyS (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If Length > 0 and Destination is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">>   If Length > 0 and Source is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> @@ -290,7 +288,6 @@ StrnCpyS (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If Destination is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">>   If Source is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> @@ -330,7 +327,6 @@ StrCatS (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If Destination is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">>   If Source is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> @@ -377,12 +373,7 @@ StrnCatS (</p>
<p class="MsoNormal">>   be ignored. Then, the function stops at the first character that is a not a</p>
<p class="MsoNormal">>   valid decimal character or a Null-terminator, whichever one comes first.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Data is NULL, then ASSERT().</p>
<p class="MsoNormal">>   If String is not aligned in a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If PcdMaximumUnicodeStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumUnicodeStringLength Unicode characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If String has no valid decimal digits in the above format, then 0 is stored</p>
<p class="MsoNormal">>   at the location pointed to by Data.</p>
<p class="MsoNormal">> @@ -433,12 +424,7 @@ StrDecimalToUintnS (</p>
<p class="MsoNormal">>   be ignored. Then, the function stops at the first character that is a not a</p>
<p class="MsoNormal">>   valid decimal character or a Null-terminator, whichever one comes first.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Data is NULL, then ASSERT().</p>
<p class="MsoNormal">>   If String is not aligned in a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If PcdMaximumUnicodeStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumUnicodeStringLength Unicode characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If String has no valid decimal digits in the above format, then 0 is stored</p>
<p class="MsoNormal">>   at the location pointed to by Data.</p>
<p class="MsoNormal">> @@ -494,12 +480,7 @@ StrDecimalToUint64S (</p>
<p class="MsoNormal">>   the first character that is a not a valid hexadecimal character or NULL,</p>
<p class="MsoNormal">>   whichever one comes first.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Data is NULL, then ASSERT().</p>
<p class="MsoNormal">>   If String is not aligned in a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If PcdMaximumUnicodeStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumUnicodeStringLength Unicode characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If String has no valid hexadecimal digits in the above format, then 0 is</p>
<p class="MsoNormal">>   stored at the location pointed to by Data.</p>
<p class="MsoNormal">> @@ -555,12 +536,7 @@ StrHexToUintnS (</p>
<p class="MsoNormal">>   the first character that is a not a valid hexadecimal character or NULL,</p>
<p class="MsoNormal">>   whichever one comes first.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Data is NULL, then ASSERT().</p>
<p class="MsoNormal">>   If String is not aligned in a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If PcdMaximumUnicodeStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumUnicodeStringLength Unicode characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If String has no valid hexadecimal digits in the above format, then 0 is</p>
<p class="MsoNormal">>   stored at the location pointed to by Data.</p>
<p class="MsoNormal">> @@ -649,8 +625,6 @@ AsciiStrnSizeS (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   This function is similar as strcpy_s defined in C11.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   @param  Destination              A pointer to a Null-terminated Ascii string.</p>
<p class="MsoNormal">> @@ -683,8 +657,6 @@ AsciiStrCpyS (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   This function is similar as strncpy_s defined in C11.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   @param  Destination              A pointer to a Null-terminated Ascii string.</p>
<p class="MsoNormal">> @@ -719,8 +691,6 @@ AsciiStrnCpyS (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   This function is similar as strcat_s defined in C11.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   @param  Destination              A pointer to a Null-terminated Ascii string.</p>
<p class="MsoNormal">> @@ -757,8 +727,6 @@ AsciiStrCatS (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   This function is similar as strncat_s defined in C11.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   @param  Destination              A pointer to a Null-terminated Ascii string.</p>
<p class="MsoNormal">> @@ -804,12 +772,6 @@ AsciiStrnCatS (</p>
<p class="MsoNormal">>   be ignored. Then, the function stops at the first character that is a not a</p>
<p class="MsoNormal">>   valid decimal character or a Null-terminator, whichever one comes first.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Data is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If PcdMaximumAsciiStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumAsciiStringLength Ascii characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If String has no valid decimal digits in the above format, then 0 is stored</p>
<p class="MsoNormal">>   at the location pointed to by Data.</p>
<p class="MsoNormal">>   If the number represented by String exceeds the range defined by UINTN, then</p>
<p class="MsoNormal">> @@ -859,12 +821,6 @@ AsciiStrDecimalToUintnS (</p>
<p class="MsoNormal">>   be ignored. Then, the function stops at the first character that is a not a</p>
<p class="MsoNormal">>   valid decimal character or a Null-terminator, whichever one comes first.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Data is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If PcdMaximumAsciiStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumAsciiStringLength Ascii characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If String has no valid decimal digits in the above format, then 0 is stored</p>
<p class="MsoNormal">>   at the location pointed to by Data.</p>
<p class="MsoNormal">>   If the number represented by String exceeds the range defined by UINT64, then</p>
<p class="MsoNormal">> @@ -918,12 +874,6 @@ AsciiStrDecimalToUint64S (</p>
<p class="MsoNormal">>   character that is a not a valid hexadecimal character or Null-terminator,</p>
<p class="MsoNormal">>   whichever on comes first.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Data is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If PcdMaximumAsciiStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumAsciiStringLength Ascii characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If String has no valid hexadecimal digits in the above format, then 0 is</p>
<p class="MsoNormal">>   stored at the location pointed to by Data.</p>
<p class="MsoNormal">>   If the number represented by String exceeds the range defined by UINTN, then</p>
<p class="MsoNormal">> @@ -977,12 +927,6 @@ AsciiStrHexToUintnS (</p>
<p class="MsoNormal">>   character that is a not a valid hexadecimal character or Null-terminator,</p>
<p class="MsoNormal">>   whichever on comes first.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Data is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If PcdMaximumAsciiStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumAsciiStringLength Ascii characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If String has no valid hexadecimal digits in the above format, then 0 is</p>
<p class="MsoNormal">>   stored at the location pointed to by Data.</p>
<p class="MsoNormal">>   If the number represented by String exceeds the range defined by UINT64, then</p>
<p class="MsoNormal">> @@ -1533,16 +1477,8 @@ StrHexToUint64 (</p>
<p class="MsoNormal">>   "::" can be used to compress one or more groups of X when X contains only 0.</p>
<p class="MsoNormal">>   The "::" can only appear once in the String.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If Address is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If String is not aligned in a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If PcdMaximumUnicodeStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumUnicodeStringLength Unicode characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If EndPointer is not NULL and Address is translated from String, a pointer</p>
<p class="MsoNormal">>   to the character that stopped the scan is stored at the location pointed to</p>
<p class="MsoNormal">>   by EndPointer.</p>
<p class="MsoNormal">> @@ -1594,16 +1530,8 @@ StrToIpv6Address (</p>
<p class="MsoNormal">>   When /P is in the String, the function stops at the first character that is not</p>
<p class="MsoNormal">>   a valid decimal digit character after P is converted.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If Address is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If String is not aligned in a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If PcdMaximumUnicodeStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumUnicodeStringLength Unicode characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If EndPointer is not NULL and Address is translated from String, a pointer</p>
<p class="MsoNormal">>   to the character that stopped the scan is stored at the location pointed to</p>
<p class="MsoNormal">>   by EndPointer.</p>
<p class="MsoNormal">> @@ -1667,8 +1595,6 @@ StrToIpv4Address (</p>
<p class="MsoNormal">>                   oo          Data4[48:55]</p>
<p class="MsoNormal">>                   pp          Data4[56:63]</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Guid is NULL, then ASSERT().</p>
<p class="MsoNormal">>   If String is not aligned in a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   @param  String                   Pointer to a Null-terminated Unicode string.</p>
<p class="MsoNormal">> @@ -1703,17 +1629,6 @@ StrToGuid (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If String is not aligned in a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If Buffer is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If Length is not multiple of 2, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If PcdMaximumUnicodeStringLength is not zero and Length is greater than</p>
<p class="MsoNormal">> -  PcdMaximumUnicodeStringLength, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If MaxBufferSize is less than (Length / 2), then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   @param  String                   Pointer to a Null-terminated Unicode string.</p>
<p class="MsoNormal">>   @param  Length                   The number of Unicode characters to decode.</p>
<p class="MsoNormal">>   @param  Buffer                   Pointer to the converted bytes array.</p>
<p class="MsoNormal">> @@ -1804,7 +1719,6 @@ UnicodeStrToAsciiStr (</p>
<p class="MsoNormal">>   the upper 8 bits, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If Source is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> @@ -1851,7 +1765,6 @@ UnicodeStrToAsciiStrS (</p>
<p class="MsoNormal">>   If any Unicode characters in Source contain non-zero value in the upper 8</p>
<p class="MsoNormal">>   bits, then ASSERT().</p>
<p class="MsoNormal">>   If Source is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> @@ -2415,10 +2328,6 @@ AsciiStrHexToUint64 (</p>
<p class="MsoNormal">>   "::" can be used to compress one or more groups of X when X contains only 0.</p>
<p class="MsoNormal">>   The "::" can only appear once in the String.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If Address is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If EndPointer is not NULL and Address is translated from String, a pointer</p>
<p class="MsoNormal">>   to the character that stopped the scan is stored at the location pointed to</p>
<p class="MsoNormal">>   by EndPointer.</p>
<p class="MsoNormal">> @@ -2470,10 +2379,6 @@ AsciiStrToIpv6Address (</p>
<p class="MsoNormal">>   When /P is in the String, the function stops at the first character that is not</p>
<p class="MsoNormal">>   a valid decimal digit character after P is converted.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If Address is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If EndPointer is not NULL and Address is translated from String, a pointer</p>
<p class="MsoNormal">>   to the character that stopped the scan is stored at the location pointed to</p>
<p class="MsoNormal">>   by EndPointer.</p>
<p class="MsoNormal">> @@ -2535,9 +2440,6 @@ AsciiStrToIpv4Address (</p>
<p class="MsoNormal">>                   oo          Data4[48:55]</p>
<p class="MsoNormal">>                   pp          Data4[56:63]</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Guid is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   @param  String                   Pointer to a Null-terminated ASCII string.</p>
<p class="MsoNormal">>   @param  Guid                     Pointer to the converted GUID.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> @@ -2568,17 +2470,6 @@ AsciiStrToGuid (</p>
<p class="MsoNormal">>   decoding stops after Length of characters and outputs Buffer containing</p>
<p class="MsoNormal">>   (Length / 2) bytes.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If Buffer is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If Length is not multiple of 2, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If PcdMaximumAsciiStringLength is not zero and Length is greater than</p>
<p class="MsoNormal">> -  PcdMaximumAsciiStringLength, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If MaxBufferSize is less than (Length / 2), then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   @param  String                   Pointer to a Null-terminated ASCII string.</p>
<p class="MsoNormal">>   @param  Length                   The number of ASCII characters to decode.</p>
<p class="MsoNormal">>   @param  Buffer                   Pointer to the converted bytes array.</p>
<p class="MsoNormal">> @@ -2659,7 +2550,6 @@ AsciiStrToUnicodeStr (</p>
<p class="MsoNormal">>   equal or greater than ((AsciiStrLen (Source) + 1) * sizeof (CHAR16)) in bytes.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If Destination is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> @@ -2705,7 +2595,6 @@ AsciiStrToUnicodeStrS (</p>
<p class="MsoNormal">>   ((MIN(AsciiStrLen(Source), Length) + 1) * sizeof (CHAR8)) in bytes.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If Destination is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If an error is returned, then Destination and DestinationLength are</p>
<p class="MsoNormal">>   unmodified.</p>
<p class="MsoNormal">> diff --git a/MdePkg/Library/BaseLib/SafeString.c b/MdePkg/Library/BaseLib/SafeString.c</p>
<p class="MsoNormal">> index 7dc03d2caa..3bb23ca1a1 100644</p>
<p class="MsoNormal">> --- a/MdePkg/Library/BaseLib/SafeString.c</p>
<p class="MsoNormal">> +++ b/MdePkg/Library/BaseLib/SafeString.c</p>
<p class="MsoNormal">> @@ -14,8 +14,10 @@</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> #define SAFE_STRING_CONSTRAINT_CHECK(Expression, Status)  \</p>
<p class="MsoNormal">>   do { \</p>
<p class="MsoNormal">> -    ASSERT (Expression); \</p>
<p class="MsoNormal">>     if (!(Expression)) { \</p>
<p class="MsoNormal">> +      DEBUG ((DEBUG_VERBOSE, \</p>
<p class="MsoNormal">> +        "%a(%d) %a: SAFE_STRING_CONSTRAINT_CHECK(%a) failed.  Return %r\n", \</p>
<p class="MsoNormal">> +        __FILE__, __LINE__, __FUNCTION__, #Expression, Status)); \</p>
<p class="MsoNormal">>       return Status; \</p>
<p class="MsoNormal">>     } \</p>
<p class="MsoNormal">>   } while (FALSE)</p>
<p class="MsoNormal">> @@ -197,7 +199,6 @@ StrnSizeS (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If Destination is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">>   If Source is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> @@ -279,7 +280,6 @@ StrCpyS (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If Length > 0 and Destination is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">>   If Length > 0 and Source is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> @@ -372,7 +372,6 @@ StrnCpyS (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If Destination is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">>   If Source is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> @@ -473,7 +472,6 @@ StrCatS (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If Destination is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">>   If Source is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> @@ -590,12 +588,7 @@ StrnCatS (</p>
<p class="MsoNormal">>   be ignored. Then, the function stops at the first character that is a not a</p>
<p class="MsoNormal">>   valid decimal character or a Null-terminator, whichever one comes first.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Data is NULL, then ASSERT().</p>
<p class="MsoNormal">>   If String is not aligned in a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If PcdMaximumUnicodeStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumUnicodeStringLength Unicode characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If String has no valid decimal digits in the above format, then 0 is stored</p>
<p class="MsoNormal">>   at the location pointed to by Data.</p>
<p class="MsoNormal">> @@ -705,12 +698,7 @@ StrDecimalToUintnS (</p>
<p class="MsoNormal">>   be ignored. Then, the function stops at the first character that is a not a</p>
<p class="MsoNormal">>   valid decimal character or a Null-terminator, whichever one comes first.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Data is NULL, then ASSERT().</p>
<p class="MsoNormal">>   If String is not aligned in a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If PcdMaximumUnicodeStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumUnicodeStringLength Unicode characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If String has no valid decimal digits in the above format, then 0 is stored</p>
<p class="MsoNormal">>   at the location pointed to by Data.</p>
<p class="MsoNormal">> @@ -825,12 +813,7 @@ StrDecimalToUint64S (</p>
<p class="MsoNormal">>   the first character that is a not a valid hexadecimal character or NULL,</p>
<p class="MsoNormal">>   whichever one comes first.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Data is NULL, then ASSERT().</p>
<p class="MsoNormal">>   If String is not aligned in a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If PcdMaximumUnicodeStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumUnicodeStringLength Unicode characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If String has no valid hexadecimal digits in the above format, then 0 is</p>
<p class="MsoNormal">>   stored at the location pointed to by Data.</p>
<p class="MsoNormal">> @@ -956,12 +939,7 @@ StrHexToUintnS (</p>
<p class="MsoNormal">>   the first character that is a not a valid hexadecimal character or NULL,</p>
<p class="MsoNormal">>   whichever one comes first.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Data is NULL, then ASSERT().</p>
<p class="MsoNormal">>   If String is not aligned in a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If PcdMaximumUnicodeStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumUnicodeStringLength Unicode characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If String has no valid hexadecimal digits in the above format, then 0 is</p>
<p class="MsoNormal">>   stored at the location pointed to by Data.</p>
<p class="MsoNormal">> @@ -1091,16 +1069,8 @@ StrHexToUint64S (</p>
<p class="MsoNormal">>   "::" can be used to compress one or more groups of X when X contains only 0.</p>
<p class="MsoNormal">>   The "::" can only appear once in the String.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If Address is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If String is not aligned in a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If PcdMaximumUnicodeStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumUnicodeStringLength Unicode characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If EndPointer is not NULL and Address is translated from String, a pointer</p>
<p class="MsoNormal">>   to the character that stopped the scan is stored at the location pointed to</p>
<p class="MsoNormal">>   by EndPointer.</p>
<p class="MsoNormal">> @@ -1317,16 +1287,8 @@ StrToIpv6Address (</p>
<p class="MsoNormal">>   When /P is in the String, the function stops at the first character that is not</p>
<p class="MsoNormal">>   a valid decimal digit character after P is converted.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If Address is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If String is not aligned in a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If PcdMaximumUnicodeStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumUnicodeStringLength Unicode characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If EndPointer is not NULL and Address is translated from String, a pointer</p>
<p class="MsoNormal">>   to the character that stopped the scan is stored at the location pointed to</p>
<p class="MsoNormal">>   by EndPointer.</p>
<p class="MsoNormal">> @@ -1482,8 +1444,6 @@ StrToIpv4Address (</p>
<p class="MsoNormal">>                   oo          Data4[48:55]</p>
<p class="MsoNormal">>                   pp          Data4[56:63]</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Guid is NULL, then ASSERT().</p>
<p class="MsoNormal">>   If String is not aligned in a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   @param  String                   Pointer to a Null-terminated Unicode string.</p>
<p class="MsoNormal">> @@ -1589,17 +1549,6 @@ StrToGuid (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If String is not aligned in a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If Buffer is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If Length is not multiple of 2, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If PcdMaximumUnicodeStringLength is not zero and Length is greater than</p>
<p class="MsoNormal">> -  PcdMaximumUnicodeStringLength, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If MaxBufferSize is less than (Length / 2), then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   @param  String                   Pointer to a Null-terminated Unicode string.</p>
<p class="MsoNormal">>   @param  Length                   The number of Unicode characters to decode.</p>
<p class="MsoNormal">>   @param  Buffer                   Pointer to the converted bytes array.</p>
<p class="MsoNormal">> @@ -1779,8 +1728,6 @@ AsciiStrnSizeS (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   This function is similar as strcpy_s defined in C11.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   @param  Destination              A pointer to a Null-terminated Ascii string.</p>
<p class="MsoNormal">> @@ -1856,8 +1803,6 @@ AsciiStrCpyS (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   This function is similar as strncpy_s defined in C11.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   @param  Destination              A pointer to a Null-terminated Ascii string.</p>
<p class="MsoNormal">> @@ -1944,8 +1889,6 @@ AsciiStrnCpyS (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   This function is similar as strcat_s defined in C11.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   @param  Destination              A pointer to a Null-terminated Ascii string.</p>
<p class="MsoNormal">> @@ -2040,8 +1983,6 @@ AsciiStrCatS (</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   This function is similar as strncat_s defined in C11.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   @param  Destination              A pointer to a Null-terminated Ascii string.</p>
<p class="MsoNormal">> @@ -2154,12 +2095,6 @@ AsciiStrnCatS (</p>
<p class="MsoNormal">>   be ignored. Then, the function stops at the first character that is a not a</p>
<p class="MsoNormal">>   valid decimal character or a Null-terminator, whichever one comes first.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Data is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If PcdMaximumAsciiStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumAsciiStringLength Ascii characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If String has no valid decimal digits in the above format, then 0 is stored</p>
<p class="MsoNormal">>   at the location pointed to by Data.</p>
<p class="MsoNormal">>   If the number represented by String exceeds the range defined by UINTN, then</p>
<p class="MsoNormal">> @@ -2266,12 +2201,6 @@ AsciiStrDecimalToUintnS (</p>
<p class="MsoNormal">>   be ignored. Then, the function stops at the first character that is a not a</p>
<p class="MsoNormal">>   valid decimal character or a Null-terminator, whichever one comes first.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Data is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If PcdMaximumAsciiStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumAsciiStringLength Ascii characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If String has no valid decimal digits in the above format, then 0 is stored</p>
<p class="MsoNormal">>   at the location pointed to by Data.</p>
<p class="MsoNormal">>   If the number represented by String exceeds the range defined by UINT64, then</p>
<p class="MsoNormal">> @@ -2382,12 +2311,6 @@ AsciiStrDecimalToUint64S (</p>
<p class="MsoNormal">>   character that is a not a valid hexadecimal character or Null-terminator,</p>
<p class="MsoNormal">>   whichever on comes first.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Data is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If PcdMaximumAsciiStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumAsciiStringLength Ascii characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If String has no valid hexadecimal digits in the above format, then 0 is</p>
<p class="MsoNormal">>   stored at the location pointed to by Data.</p>
<p class="MsoNormal">>   If the number represented by String exceeds the range defined by UINTN, then</p>
<p class="MsoNormal">> @@ -2509,12 +2432,6 @@ AsciiStrHexToUintnS (</p>
<p class="MsoNormal">>   character that is a not a valid hexadecimal character or Null-terminator,</p>
<p class="MsoNormal">>   whichever on comes first.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Data is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If PcdMaximumAsciiStringLength is not zero, and String contains more than</p>
<p class="MsoNormal">> -  PcdMaximumAsciiStringLength Ascii characters, not including the</p>
<p class="MsoNormal">> -  Null-terminator, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If String has no valid hexadecimal digits in the above format, then 0 is</p>
<p class="MsoNormal">>   stored at the location pointed to by Data.</p>
<p class="MsoNormal">>   If the number represented by String exceeds the range defined by UINT64, then</p>
<p class="MsoNormal">> @@ -2635,7 +2552,6 @@ AsciiStrHexToUint64S (</p>
<p class="MsoNormal">>   the upper 8 bits, then ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If Source is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> @@ -2735,7 +2651,6 @@ UnicodeStrToAsciiStrS (</p>
<p class="MsoNormal">>   If any Unicode characters in Source contain non-zero value in the upper 8</p>
<p class="MsoNormal">>   bits, then ASSERT().</p>
<p class="MsoNormal">>   If Source is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If an error is returned, then Destination and DestinationLength are</p>
<p class="MsoNormal">>   unmodified.</p>
<p class="MsoNormal">> @@ -2855,7 +2770,6 @@ UnicodeStrnToAsciiStrS (</p>
<p class="MsoNormal">>   equal or greater than ((AsciiStrLen (Source) + 1) * sizeof (CHAR16)) in bytes.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If Destination is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If an error is returned, then the Destination is unmodified.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> @@ -2948,7 +2862,6 @@ AsciiStrToUnicodeStrS (</p>
<p class="MsoNormal">>   ((MIN(AsciiStrLen(Source), Length) + 1) * sizeof (CHAR8)) in bytes.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If Destination is not aligned on a 16-bit boundary, then ASSERT().</p>
<p class="MsoNormal">> -  If an error would be returned, then the function will also ASSERT().</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">>   If an error is returned, then Destination and DestinationLength are</p>
<p class="MsoNormal">>   unmodified.</p>
<p class="MsoNormal">> @@ -3072,10 +2985,6 @@ AsciiStrnToUnicodeStrS (</p>
<p class="MsoNormal">>   "::" can be used to compress one or more groups of X when X contains only 0.</p>
<p class="MsoNormal">>   The "::" can only appear once in the String.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If Address is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If EndPointer is not NULL and Address is translated from String, a pointer</p>
<p class="MsoNormal">>   to the character that stopped the scan is stored at the location pointed to</p>
<p class="MsoNormal">>   by EndPointer.</p>
<p class="MsoNormal">> @@ -3291,10 +3200,6 @@ AsciiStrToIpv6Address (</p>
<p class="MsoNormal">>   When /P is in the String, the function stops at the first character that is not</p>
<p class="MsoNormal">>   a valid decimal digit character after P is converted.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If Address is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   If EndPointer is not NULL and Address is translated from String, a pointer</p>
<p class="MsoNormal">>   to the character that stopped the scan is stored at the location pointed to</p>
<p class="MsoNormal">>   by EndPointer.</p>
<p class="MsoNormal">> @@ -3448,9 +3353,6 @@ AsciiStrToIpv4Address (</p>
<p class="MsoNormal">>                   oo          Data4[48:55]</p>
<p class="MsoNormal">>                   pp          Data4[56:63]</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -  If Guid is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   @param  String                   Pointer to a Null-terminated ASCII string.</p>
<p class="MsoNormal">>   @param  Guid                     Pointer to the converted GUID.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> @@ -3550,17 +3452,6 @@ AsciiStrToGuid (</p>
<p class="MsoNormal">>   decoding stops after Length of characters and outputs Buffer containing</p>
<p class="MsoNormal">>   (Length / 2) bytes.</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal">> -  If String is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If Buffer is NULL, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If Length is not multiple of 2, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If PcdMaximumAsciiStringLength is not zero and Length is greater than</p>
<p class="MsoNormal">> -  PcdMaximumAsciiStringLength, then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">> -  If MaxBufferSize is less than (Length / 2), then ASSERT().</p>
<p class="MsoNormal">> -</p>
<p class="MsoNormal">>   @param  String                   Pointer to a Null-terminated ASCII string.</p>
<p class="MsoNormal">>   @param  Length                   The number of ASCII characters to decode.</p>
<p class="MsoNormal">>   @param  Buffer                   Pointer to the converted bytes array.</p>
<p class="MsoNormal">> --</p>
<p class="MsoNormal">> 2.21.0.windows.1</p>
<p class="MsoNormal">> </p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>

<div width="1" style="color:white;clear:both">_._,_._,_</div>
<hr>
Groups.io Links:<p>


You receive all messages sent to this group.



<p>

<a target="_blank" href="https://edk2.groups.io/g/devel/message/59984">View/Reply Online (#59984)</a> |


  


|


  
    <a target="_blank" href="https://groups.io/mt/74355542/1813853">Mute This Topic</a>
  

| <a href="https://edk2.groups.io/g/devel/post">New Topic</a><br>



<br>

<a href="https://edk2.groups.io/g/devel/editsub/1813853">Your Subscription</a> |
<a href="mailto:devel+owner@edk2.groups.io">Contact Group Owner</a> |

<a href="https://edk2.groups.io/g/devel/unsub">Unsubscribe</a>

 [edk2-devel-archive@redhat.com]<br>
<div width="1" style="color:white;clear:both">_._,_._,_</div>