https://git.reactos.org/?p=reactos.git;a=commitdiff;h=49fcbe7cd8531178970ffe...
commit 49fcbe7cd8531178970ffe48f91f3dc4d68022d1 Author: Jérôme Gardou jerome.gardou@reactos.org AuthorDate: Mon May 17 16:14:26 2021 +0200 Commit: Jérôme Gardou zefklop@users.noreply.github.com CommitDate: Wed May 19 22:50:29 2021 +0200
[RTL] Fix RtlIsValidOemCharacter implementation for Multibyte code pages
CORE-17571 --- sdk/lib/rtl/unicode.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/sdk/lib/rtl/unicode.c b/sdk/lib/rtl/unicode.c index 7f045401326..e1896497ce6 100644 --- a/sdk/lib/rtl/unicode.c +++ b/sdk/lib/rtl/unicode.c @@ -519,16 +519,24 @@ RtlIsValidOemCharacter(IN PWCHAR Char) /* If multi-byte code page present */ if (NlsMbOemCodePageTag) { - USHORT Offset = 0; + USHORT Offset;
OemChar = NlsUnicodeToMbOemTable[*Char];
/* If character has Lead Byte */ - if (NlsOemLeadByteInfo[HIBYTE(OemChar)]) - Offset = NlsOemLeadByteInfo[HIBYTE(OemChar)]; + Offset = NlsOemLeadByteInfo[HIBYTE(OemChar)]; + if (Offset) + { + /* Use DBCS table */ + UnicodeChar = NlsOemLeadByteInfo[Offset + LOBYTE(OemChar)]; + } + else + { + UnicodeChar = NlsOemToUnicodeTable[OemChar]; + }
- /* Receive Unicode character from the table */ - UnicodeChar = RtlpUpcaseUnicodeChar(NlsOemToUnicodeTable[LOBYTE(OemChar) + Offset]); + /* Upcase */ + UnicodeChar = RtlpUpcaseUnicodeChar(UnicodeChar);
/* Receive OEM character from the table */ OemChar = NlsUnicodeToMbOemTable[UnicodeChar]; @@ -544,7 +552,10 @@ RtlIsValidOemCharacter(IN PWCHAR Char)
/* Not valid character, failed */ if (OemChar == NlsOemDefaultChar) + { + DPRINT1("\u%04x is not valid for OEM\n", *Char); return FALSE; + }
*Char = UnicodeChar;