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:
Hao Wu 2018-10-19 10:29:36 +08:00
parent 073891a3e7
commit 0dab57708d
2 changed files with 3 additions and 3 deletions

View File

@ -2932,7 +2932,7 @@ AsciiStrToUnicodeStrS (
// Convert string // Convert string
// //
while (*Source != '\0') { while (*Source != '\0') {
*(Destination++) = (CHAR16)*(Source++); *(Destination++) = (CHAR16)(UINT8)*(Source++);
} }
*Destination = '\0'; *Destination = '\0';
@ -3045,7 +3045,7 @@ AsciiStrnToUnicodeStrS (
// Convert string // Convert string
// //
while ((*Source != 0) && (SourceLen > 0)) { while ((*Source != 0) && (SourceLen > 0)) {
*(Destination++) = (CHAR16)*(Source++); *(Destination++) = (CHAR16)(UINT8)*(Source++);
SourceLen--; SourceLen--;
(*DestinationLength)++; (*DestinationLength)++;
} }

View File

@ -1746,7 +1746,7 @@ AsciiStrToUnicodeStr (
ReturnValue = Destination; ReturnValue = Destination;
while (*Source != '\0') { while (*Source != '\0') {
*(Destination++) = (CHAR16) *(Source++); *(Destination++) = (CHAR16)(UINT8) *(Source++);
} }
// //
// End the Destination with a NULL. // End the Destination with a NULL.