From 6605c4a4025cd86a440eaf39d4f31a3b687e5abb Mon Sep 17 00:00:00 2001 From: Petr Machata Date: Wed, 13 Feb 2013 13:18:54 +0100 Subject: [PATCH] Fix classifying incomplete UTF-8 sequences in Boost.Locale --- boost-1.50.0-invalid-utf8.patch | 52 +++++++++++++++++++++++++++++++++ boost.spec | 9 ++++-- 2 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 boost-1.50.0-invalid-utf8.patch diff --git a/boost-1.50.0-invalid-utf8.patch b/boost-1.50.0-invalid-utf8.patch new file mode 100644 index 0000000..7ef51e9 --- /dev/null +++ b/boost-1.50.0-invalid-utf8.patch @@ -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 diff --git a/boost.spec b/boost.spec index 7257d64..f86abb1 100644 --- a/boost.spec +++ b/boost.spec @@ -25,7 +25,7 @@ Name: boost Summary: The free peer-reviewed portable C++ source libraries Version: 1.50.0 %define version_enc 1_50_0 -Release: 4%{?dist} +Release: 5%{?dist} License: Boost and MIT and Python %define toplev_dirname %{name}_%{version_enc} @@ -108,6 +108,9 @@ Patch12: boost-1.50.0-polygon.patch # https://bugzilla.redhat.com/show_bug.cgi?id=828857 Patch15: boost-1.50.0-pool.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=907481 +Patch17: boost-1.50.0-invalid-utf8.patch + %bcond_with tests %bcond_with docs_generated @@ -485,6 +488,7 @@ a number of significant features and is now developed independently %patch10 -p1 %patch12 -p3 %patch15 -p0 +%patch17 -p0 # At least python2_version needs to be a macro so that it's visible in # %%install as well. @@ -969,9 +973,10 @@ rm -rf $RPM_BUILD_ROOT %{_mandir}/man1/bjam.1* %changelog -* Thu Aug 16 2012 Petr Machata - 1.50.0-5 +* Wed Feb 13 2013 Petr Machata - 1.50.0-5 - Update %%description to reflect current state of C++ standardization. Courtesy of Jonathan Wakely. (#837813) +- Fix classifying incomplete UTF-8 sequences in Boost.Locale (#907481) * Wed Aug 15 2012 Petr Machata - 1.50.0-4 - Override boost_thread-mt.so with a linker script that brings in