aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/rfb/util.cxx2
-rw-r--r--tests/unit/unicode.cxx2
2 files changed, 3 insertions, 1 deletions
diff --git a/common/rfb/util.cxx b/common/rfb/util.cxx
index cc5b7690..ecab8485 100644
--- a/common/rfb/util.cxx
+++ b/common/rfb/util.cxx
@@ -314,7 +314,7 @@ namespace rfb {
*dst++ = src;
*dst++ = L'\0';
return 1;
- } else if (src < 0x110000) {
+ } else if ((src >= 0x10000) && (src < 0x110000)) {
src -= 0x10000;
*dst++ = 0xd800 | ((src >> 10) & 0x03ff);
*dst++ = 0xdc00 | (src & 0x03ff);
diff --git a/tests/unit/unicode.cxx b/tests/unit/unicode.cxx
index bb2525de..52548e00 100644
--- a/tests/unit/unicode.cxx
+++ b/tests/unit/unicode.cxx
@@ -59,6 +59,7 @@ struct _ucs4utf16 ucs4utf16[] = {
{ 0x2d006, L"\xd874\xdc06" },
{ 0xfffd, L"\xdc40\xdc12" },
{ 0x110200, L"\xfffd" },
+ { 0xd87f, L"\xfffd" },
};
struct _latin1utf8 latin1utf8[] = {
@@ -75,6 +76,7 @@ struct _utf8utf16 utf8utf16[] = {
{ "\xf0\x9f\x98\xb8\xf0\x9f\x99\x81\xf0\x9f\x99\x82", L"\xd83d\xde38\xd83d\xde41\xd83d\xde42" },
{ "\xf0\xad\x80\x86\xf0\xad\x80\x88", L"\xd874\xdc06\xd874\xdc08" },
{ "\xef\xbf\xbd\xc3\xa5", L"\xd840\xe5" },
+ { "\xed\xa1\xbf", L"\xfffd" },
};
#define ARRAY_SIZE(a) (sizeof(a)/sizeof(*a))