summaryrefslogtreecommitdiffstats
path: root/MdePkg
diff options
context:
space:
mode:
authorHao Wu <hao.a.wu@intel.com>2018-10-19 10:29:36 +0800
committerHao Wu <hao.a.wu@intel.com>2018-10-23 08:45:00 +0800
commit0dab57708de64284ac83f0632daba4d9e1cb1135 (patch)
tree0c25df2fc817cc6b2444df43fbfc025d85e45f38 /MdePkg
parent073891a3e74059e996258e32b56b3f0770c6fe55 (diff)
downloadedk2-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')
-rw-r--r--MdePkg/Library/BaseLib/SafeString.c4
-rw-r--r--MdePkg/Library/BaseLib/String.c2
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.