apply upstream fix to regexcmp code which was causing Chromium crashes

This commit is contained in:
Tom Callaway 2012-08-31 10:13:19 -04:00
parent 49992893fe
commit ed001727b7
2 changed files with 42 additions and 1 deletions

View File

@ -0,0 +1,36 @@
--- icu/source/i18n/regexcmp.cpp (revision 31398)
+++ icu/source/i18n/regexcmp.cpp (revision 31782)
@@ -3307,8 +3307,29 @@
case URX_STRING_I:
- // TODO: Is the case-folded string the longest?
- // If so we can optimize this the same as URX_STRING.
- loc++;
- currentLen = INT32_MAX;
+ // TODO: This code assumes that any user string that matches will be no longer
+ // than our compiled string, with case insensitive matching.
+ // Our compiled string has been case-folded already.
+ //
+ // Any matching user string will have no more code points than our
+ // compiled (folded) string. Folding may add code points, but
+ // not remove them.
+ //
+ // There is a potential problem if a supplemental code point
+ // case-folds to a BMP code point. In this case our compiled string
+ // could be shorter (in code units) than a matching user string.
+ //
+ // At this time (Unicode 6.1) there are no such characters, and this case
+ // is not being handled. A test, intltest regex/Bug9283, will fail if
+ // any problematic characters are added to Unicode.
+ //
+ // If this happens, we can make a set of the BMP chars that the
+ // troublesome supplementals fold to, scan our string, and bump the
+ // currentLen one extra for each that is found.
+ //
+ {
+ loc++;
+ int32_t stringLenOp = (int32_t)fRXPat->fCompiledPat->elementAti(loc);
+ currentLen = safeIncrement(currentLen, URX_VAL(stringLenOp));
+ }
break;

View File

@ -1,6 +1,6 @@
Name: icu
Version: 49.1.1
Release: 4%{?dist}
Release: 5%{?dist}
Summary: International Components for Unicode
Group: Development/Tools
License: MIT and UCD and Public Domain
@ -13,6 +13,7 @@ Requires: lib%{name} = %{version}-%{release}
Patch1: icu.8198.revert.icu5431.patch
Patch2: icu.8800.freeserif.crash.patch
Patch3: icu.7601.Indic-ccmp.patch
Patch4: icu.9283.regexcmp.crash.patch
%description
Tools and utilities for developing with icu.
@ -55,6 +56,7 @@ BuildArch: noarch
%patch1 -p2 -R -b .icu8198.revert.icu5431.patch
%patch2 -p1 -b .icu8800.freeserif.crash.patch
%patch3 -p1 -b .icu7601.Indic-ccmp.patch
%patch4 -p1 -b .icu9283.regexcmp.crash.patch
%build
cd source
@ -151,6 +153,9 @@ make %{?_smp_mflags} -C source check
%doc source/__docs/%{name}/html/*
%changelog
* Fri Aug 31 2012 Tom Callaway <spot@fedoraproject.org> - 49.1.1-5
- apply upstream fix (bug 9283) for regexcmp crash causing Chromium segfaults
* Thu Jul 19 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 49.1.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild