diff options
author | Hao Wu <hao.a.wu@intel.com> | 2018-10-19 10:29:36 +0800 |
---|---|---|
committer | Hao Wu <hao.a.wu@intel.com> | 2018-10-23 08:45:00 +0800 |
commit | 0dab57708de64284ac83f0632daba4d9e1cb1135 (patch) | |
tree | 0c25df2fc817cc6b2444df43fbfc025d85e45f38 /MdePkg/Library/BaseLib | |
parent | 073891a3e74059e996258e32b56b3f0770c6fe55 (diff) | |
download | edk2-0dab57708de64284ac83f0632daba4d9e1cb1135.tar.gz edk2-0dab57708de64284ac83f0632daba4d9e1cb1135.tar.bz2 edk2-0dab57708de64284ac83f0632daba4d9e1cb1135.zip |
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>
Diffstat (limited to 'MdePkg/Library/BaseLib')
-rw-r--r-- | MdePkg/Library/BaseLib/SafeString.c | 4 | ||||
-rw-r--r-- | MdePkg/Library/BaseLib/String.c | 2 |
2 files changed, 3 insertions, 3 deletions
diff --git a/MdePkg/Library/BaseLib/SafeString.c b/MdePkg/Library/BaseLib/SafeString.c index 29310889ca..417497cbc9 100644 --- a/MdePkg/Library/BaseLib/SafeString.c +++ b/MdePkg/Library/BaseLib/SafeString.c @@ -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)++;
}
diff --git a/MdePkg/Library/BaseLib/String.c b/MdePkg/Library/BaseLib/String.c index cb90774c86..e6df12797d 100644 --- a/MdePkg/Library/BaseLib/String.c +++ b/MdePkg/Library/BaseLib/String.c @@ -1746,7 +1746,7 @@ AsciiStrToUnicodeStr ( ReturnValue = Destination;
while (*Source != '\0') {
- *(Destination++) = (CHAR16) *(Source++);
+ *(Destination++) = (CHAR16)(UINT8) *(Source++);
}
//
// End the Destination with a NULL.
|