aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/ChangeLog
diff options
context:
space:
mode:
authorredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>2017-03-17 19:28:05 +0000
committerredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>2017-03-17 19:28:05 +0000
commite596bd680a5e6fc56a4bcf668d7bd958b3c9df25 (patch)
tree0e22d701b0437cb98ff145680df2d6dab207e8bb /libstdc++-v3/ChangeLog
parent9178128289cf590bcc84b6775519934255dba917 (diff)
Fix alignment bugs in std::codecvt_utf16
* src/c++11/codecvt.cc (range): Add non-type template parameter and define oerloaded operators for reading and writing code units. (range<Elem, false>): Define partial specialization for accessing wide characters in potentially unaligned byte ranges. (ucs2_span(const char16_t*, const char16_t*, ...)) (ucs4_span(const char16_t*, const char16_t*, ...)): Change parameters to range<const char16_t, false> in order to avoid unaligned reads. (__codecvt_utf16_base<char16_t>::do_out) (__codecvt_utf16_base<char32_t>::do_out) (__codecvt_utf16_base<wchar_t>::do_out): Use range specialization for unaligned data to avoid unaligned writes. (__codecvt_utf16_base<char16_t>::do_in) (__codecvt_utf16_base<char32_t>::do_in) (__codecvt_utf16_base<wchar_t>::do_in): Likewise for writes. Return error if there are unprocessable trailing bytes. (__codecvt_utf16_base<char16_t>::do_length) (__codecvt_utf16_base<char32_t>::do_length) (__codecvt_utf16_base<wchar_t>::do_length): Pass arguments of type range<const char16_t, false> to span functions. * testsuite/22_locale/codecvt/codecvt_utf16/misaligned.cc: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@246245 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/ChangeLog')
-rw-r--r--libstdc++-v3/ChangeLog23
1 files changed, 23 insertions, 0 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index d035d91ab13..6b858d1a14a 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,26 @@
+2017-03-17 Jonathan Wakely <jwakely@redhat.com>
+
+ * src/c++11/codecvt.cc (range): Add non-type template parameter and
+ define oerloaded operators for reading and writing code units.
+ (range<Elem, false>): Define partial specialization for accessing
+ wide characters in potentially unaligned byte ranges.
+ (ucs2_span(const char16_t*, const char16_t*, ...))
+ (ucs4_span(const char16_t*, const char16_t*, ...)): Change parameters
+ to range<const char16_t, false> in order to avoid unaligned reads.
+ (__codecvt_utf16_base<char16_t>::do_out)
+ (__codecvt_utf16_base<char32_t>::do_out)
+ (__codecvt_utf16_base<wchar_t>::do_out): Use range specialization for
+ unaligned data to avoid unaligned writes.
+ (__codecvt_utf16_base<char16_t>::do_in)
+ (__codecvt_utf16_base<char32_t>::do_in)
+ (__codecvt_utf16_base<wchar_t>::do_in): Likewise for writes. Return
+ error if there are unprocessable trailing bytes.
+ (__codecvt_utf16_base<char16_t>::do_length)
+ (__codecvt_utf16_base<char32_t>::do_length)
+ (__codecvt_utf16_base<wchar_t>::do_length): Pass arguments of type
+ range<const char16_t, false> to span functions.
+ * testsuite/22_locale/codecvt/codecvt_utf16/misaligned.cc: New test.
+
2017-03-16 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/79980