Fix classifying incomplete UTF-8 sequences in Boost.Locale

This commit is contained in:
Petr Machata 2013-02-13 13:26:13 +01:00
parent 0fa3a498eb
commit 6b46fc2044
2 changed files with 60 additions and 1 deletions

View File

@ -0,0 +1,52 @@
Index: boost/locale/utf.hpp
===================================================================
--- boost/locale/utf.hpp (revision 81589)
+++ boost/locale/utf.hpp (revision 81590)
@@ -219,16 +219,22 @@
if(BOOST_LOCALE_UNLIKELY(p==e))
return incomplete;
tmp = *p++;
+ if (!is_trail(tmp))
+ return illegal;
c = (c << 6) | ( tmp & 0x3F);
case 2:
if(BOOST_LOCALE_UNLIKELY(p==e))
return incomplete;
tmp = *p++;
+ if (!is_trail(tmp))
+ return illegal;
c = (c << 6) | ( tmp & 0x3F);
case 1:
if(BOOST_LOCALE_UNLIKELY(p==e))
return incomplete;
tmp = *p++;
+ if (!is_trail(tmp))
+ return illegal;
c = (c << 6) | ( tmp & 0x3F);
}
Index: libs/locale/test/test_codepage_converter.cpp
===================================================================
--- libs/locale/test/test_codepage_converter.cpp (revision 81589)
+++ libs/locale/test/test_codepage_converter.cpp (revision 81590)
@@ -140,6 +140,20 @@
TEST_TO("\xf8\x90\x80\x80\x80",illegal); // 400 0000
TEST_TO("\xfd\xbf\xbf\xbf\xbf\xbf",illegal); // 7fff ffff
+ std::cout << "-- Invalid trail" << std::endl;
+ TEST_TO("\xC2\x7F",illegal);
+ TEST_TO("\xdf\x7F",illegal);
+ TEST_TO("\xe0\x7F\x80",illegal);
+ TEST_TO("\xef\xbf\x7F",illegal);
+ TEST_TO("\xe0\x7F\x80",illegal);
+ TEST_TO("\xef\xbf\x7F",illegal);
+ TEST_TO("\xf0\x7F\x80\x80",illegal);
+ TEST_TO("\xf4\x7f\xbf\xbf",illegal);
+ TEST_TO("\xf0\x90\x7F\x80",illegal);
+ TEST_TO("\xf4\x8f\x7F\xbf",illegal);
+ TEST_TO("\xf0\x90\x80\x7F",illegal);
+ TEST_TO("\xf4\x8f\xbf\x7F",illegal);
+
std::cout << "-- Invalid length" << std::endl;
/// Test that this actually works

View File

@ -28,7 +28,7 @@ Name: boost
Summary: The free peer-reviewed portable C++ source libraries
Version: 1.48.0
%define version_enc 1_48_0
Release: 13%{?dist}
Release: 14%{?dist}
License: Boost and MIT and Python
# The CMake build framework (set of CMakeLists.txt and module.cmake files) is
@ -143,6 +143,9 @@ Patch15: boost-1.48.0-pool.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=832265
Patch16: boost-1.48.0-locale.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=907481
Patch17: boost-1.48.0-invalid-utf8.patch
%bcond_with tests
%bcond_with docs_generated
@ -516,6 +519,7 @@ sed 's/_FEDORA_SONAME/%{sonamever}/' %{PATCH1} | %{__patch} -p0 --fuzz=0
%patch12 -p3
%patch15 -p0
%patch16 -p1
%patch17 -p0
%build
# Support for building tests.
@ -1019,6 +1023,9 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man1/bjam.1*
%changelog
* Wed Feb 13 2013 Petr Machata <pmachata@redhat.com> - 1.48.0-14
- Fix classifying incomplete UTF-8 sequences in Boost.Locale (#907481)
* Thu Jun 21 2012 Petr Machata <pmachata@redhat.com> - 1.48.0-13
- Build Boost.Locale backends
- Resolves: #832265