mirror of https://github.com/acidanthera/audk.git
MdePkg/BaseLib: AsciiStrToUnicodeStr(S) not handle EASCII properly
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=1262 Current implementation of BaseLib APIs: AsciiStrToUnicodeStr() AsciiStrToUnicodeStrS() AsciiStrnToUnicodeStrS() do not handle EASCII properly. More specifically, if the value of ASCII character is larger than 0x7F, then the converted Unicode character will have all '1's in the higher 8 bits. An example: 0xC9 => 0xFFC9 (current implementations) and it should be: 0xC9 => 0x00C9 This commit will address this issue. Cc: Bin.Lain <bin_601@mail2000.com.tw> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
parent
073891a3e7
commit
0dab57708d
|
@ -2932,7 +2932,7 @@ AsciiStrToUnicodeStrS (
|
|||
// Convert string
|
||||
//
|
||||
while (*Source != '\0') {
|
||||
*(Destination++) = (CHAR16)*(Source++);
|
||||
*(Destination++) = (CHAR16)(UINT8)*(Source++);
|
||||
}
|
||||
*Destination = '\0';
|
||||
|
||||
|
@ -3045,7 +3045,7 @@ AsciiStrnToUnicodeStrS (
|
|||
// Convert string
|
||||
//
|
||||
while ((*Source != 0) && (SourceLen > 0)) {
|
||||
*(Destination++) = (CHAR16)*(Source++);
|
||||
*(Destination++) = (CHAR16)(UINT8)*(Source++);
|
||||
SourceLen--;
|
||||
(*DestinationLength)++;
|
||||
}
|
||||
|
|
|
@ -1746,7 +1746,7 @@ AsciiStrToUnicodeStr (
|
|||
|
||||
ReturnValue = Destination;
|
||||
while (*Source != '\0') {
|
||||
*(Destination++) = (CHAR16) *(Source++);
|
||||
*(Destination++) = (CHAR16)(UINT8) *(Source++);
|
||||
}
|
||||
//
|
||||
// End the Destination with a NULL.
|
||||
|
|
Loading…
Reference in New Issue