aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Boeckel <ben.boeckel@kitware.com>2023-06-06 16:50:22 -0400
committerJason Merrill <jason@redhat.com>2023-06-19 17:20:41 -0400
commitc1dbaa6656acc62c586dad1018f06113cde2d8a4 (patch)
tree4db4cee8dc719076f43078ea557844acbb281bb7
parentdbcbc858c71f69da76d1f36d6bb5d72f2db11eda (diff)
downloadgcc-c1dbaa6656acc62c586dad1018f06113cde2d8a4.zip
gcc-c1dbaa6656acc62c586dad1018f06113cde2d8a4.tar.gz
gcc-c1dbaa6656acc62c586dad1018f06113cde2d8a4.tar.bz2
libcpp: reject codepoints above 0x10FFFF
Unicode does not support such values because they are unrepresentable in UTF-16. libcpp/ * charset.cc: Reject encodings of codepoints above 0x10FFFF. UTF-16 does not support such codepoints and therefore all Unicode rejects such values. Signed-off-by: Ben Boeckel <ben.boeckel@kitware.com>
-rw-r--r--libcpp/charset.cc7
1 files changed, 7 insertions, 0 deletions
diff --git a/libcpp/charset.cc b/libcpp/charset.cc
index d7f323b..d4f573e 100644
--- a/libcpp/charset.cc
+++ b/libcpp/charset.cc
@@ -1886,6 +1886,13 @@ cpp_valid_utf8_p (const char *buffer, size_t num_bytes)
int err = one_utf8_to_cppchar (&iter, &bytesleft, &cp);
if (err)
return false;
+
+ /* Additionally, Unicode declares that all codepoints above 0010FFFF are
+ invalid because they cannot be represented in UTF-16.
+
+ Reject such values.*/
+ if (cp >= UCS_LIMIT)
+ return false;
}
/* No problems encountered. */
return true;