]> git.wh0rd.org Git - nano.git/commitdiff
don't allow entering invalid Unicode in make_mbchar() either
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Thu, 4 Aug 2005 21:38:41 +0000 (21:38 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Thu, 4 Aug 2005 21:38:41 +0000 (21:38 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2974 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/chars.c

index a79a4fca4e8ff0a0da11c5b36c4d6651e7bf33df..2321bc7afce69e8486ec73b1e4e2c8dbccf1885c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -146,6 +146,10 @@ CVS code -
        - Treat the Unicode characters D800-DFFF and FFFE-FFFF as
          invalid, since the C library's multibyte functions don't seem
          to. (DLR)
+  make_mbchar()
+       - Treat the Unicode characters D800-DFFF and FFFE-FFFF as
+         invalid, since the C library's multibyte functions don't seem
+         to. (DLR)
   parse_mbchar()
        - Remove now-unneeded bad_chr parameter. (DLR)
   mbstrchr()
index dff80d843448eafa06daab288031c065f1e2a3da..f21b9d6f4886131655d338720ff7991b9d7b72f5 100644 (file)
@@ -333,7 +333,10 @@ char *make_mbchar(int chr, int *chr_mb_len)
        chr_mb = charalloc(MB_CUR_MAX);
        *chr_mb_len = wctomb(chr_mb, chr);
 
-       if (*chr_mb_len < 0) {
+       /* Unicode D800-DFFF and FFFE-FFFF are invalid, even though
+        * they're parsed properly. */
+       if (*chr_mb_len < 0 || ((0xD800 <= chr && chr <= 0xDFFF) ||
+               (0XFFFE <= chr && chr <= 0xFFFF))) {
            wctomb(NULL, 0);
            *chr_mb_len = 0;
        }