summaryrefslogtreecommitdiffhomepage
path: root/src/argv/ntapi_tt_array_utf16.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/argv/ntapi_tt_array_utf16.c')
-rw-r--r--src/argv/ntapi_tt_array_utf16.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/argv/ntapi_tt_array_utf16.c b/src/argv/ntapi_tt_array_utf16.c
index 3d58b73..540a7c1 100644
--- a/src/argv/ntapi_tt_array_utf16.c
+++ b/src/argv/ntapi_tt_array_utf16.c
@@ -179,7 +179,6 @@ int32_t __stdcall __ntapi_tt_array_convert_utf16_to_utf8(
*arrv = (char *)(ch-(uintptr_t)base);
wch = *warrv + diff;
- /* all utf-16 streams at stake have been validated */
while (*wch && (ch < ubound)) {
if (*wch <= 0x7F) {
/* from: 00000000 0xxxxxxx (little endian) */
@@ -225,6 +224,12 @@ int32_t __stdcall __ntapi_tt_array_convert_utf16_to_utf8(
/* write the x part */
*ch = (char)(0x80 | wx);
+ } else if (wch[0] >= 0xDC00) {
+ return NT_STATUS_ILLEGAL_CHARACTER;
+ } else if (wch[1] < 0xDC00) {
+ return NT_STATUS_ILLEGAL_CHARACTER;
+ } else if (wch[1] >= 0xE000) {
+ return NT_STATUS_ILLEGAL_CHARACTER;
} else {
/* from: 110110ww wwzzzzyy 110111yy yyxxxxxx (little endian) */
/* to: 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx (utf-8) */