diff --git a/reactos/sdk/lib/rtl/unicode.c b/reactos/sdk/lib/rtl/unicode.c index 41c9a99b065..655c04d16c3 100644 --- a/reactos/sdk/lib/rtl/unicode.c +++ b/reactos/sdk/lib/rtl/unicode.c @@ -1295,6 +1295,21 @@ RtlIsTextUnicode(CONST VOID* buf, INT len, INT* pf) last_lo_byte = lo_byte; last_hi_byte = hi_byte; + + switch (s[i]) + { + case 0xFFFE: /* Reverse BOM */ + case UNICODE_NULL: + case 0x0A0D: /* ASCII CRLF (packed into one word) */ + case 0xFFFF: /* Unicode 0xFFFF */ + out_flags |= IS_TEXT_UNICODE_ILLEGAL_CHARS; + break; + } + } + + if (lo_byte_diff < 127 && !hi_byte_diff) + { + out_flags |= IS_TEXT_UNICODE_ASCII16; } if (NlsMbCodePageTag) diff --git a/rostests/apitests/advapi32/IsTextUnicode.c b/rostests/apitests/advapi32/IsTextUnicode.c index 7bd278509af..c4c8162c7df 100644 --- a/rostests/apitests/advapi32/IsTextUnicode.c +++ b/rostests/apitests/advapi32/IsTextUnicode.c @@ -80,7 +80,7 @@ START_TEST(IsTextUnicode) NEW_TEST(L"\xFFFE" L"UNICODE String 5 Привет!", IS_TEXT_UNICODE_STATISTICS, 0, FALSE), NEW_TEST(L"\xFFFE" L"UNICODE String 5 Привет!", INVALID_FLAG, 0, FALSE), - // 28 + // 31 /* Reverse BOM */ NEW_TEST(L"UNICODE S" L"\xFFFE" L"tring 5 Привет!", IS_TEXT_UNICODE_ILLEGAL_CHARS, IS_TEXT_UNICODE_ILLEGAL_CHARS, FALSE), /* UNICODE_NUL */