rpms/icu/EL-4 icu.icu5431.malayam.patch, NONE, 1.1 icu.icu5433.oriya.patch, NONE, 1.1 icu.icu5465.telegu.patch, NONE, 1.1 icu.icu5488.assamese.patch, NONE, 1.1 icu.icu5500.devicetablecrash.patch, NONE, 1.1 icu.icu5501.sinhala.biggerexpand.patch, NONE, 1.1 icu.icu5506.multiplevowels.patch, NONE, 1.1 icu.icu5557.safety.patch, NONE, 1.1 icu.icu5594.gujarati.patch, NONE, 1.1 icu.icuXXXX.malayalam.bysyllable.patch, NONE, 1.1 icu.icuXXXX.virama.prevnext.patch, NONE, 1.1 icu.regexp.patch, NONE, 1.1 icu.spec, 1.2, 1.3
Thorsten Leemhuis (thl)
fedora-extras-commits at redhat.com
Sun Jan 27 13:06:35 UTC 2008
Author: thl
Update of /cvs/pkgs/rpms/icu/EL-4
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv9553
Modified Files:
icu.spec
Added Files:
icu.icu5431.malayam.patch icu.icu5433.oriya.patch
icu.icu5465.telegu.patch icu.icu5488.assamese.patch
icu.icu5500.devicetablecrash.patch
icu.icu5501.sinhala.biggerexpand.patch
icu.icu5506.multiplevowels.patch icu.icu5557.safety.patch
icu.icu5594.gujarati.patch
icu.icuXXXX.malayalam.bysyllable.patch
icu.icuXXXX.virama.prevnext.patch icu.regexp.patch
Log Message:
Sync with F7 3.6-20 (fixes CVE-2007-4770 CVE-2007-4771)
icu.icu5431.malayam.patch:
--- NEW FILE icu.icu5431.malayam.patch ---
--- icu.orig/source/layout/IndicReordering.cpp 2006-12-21 09:24:42.000000000 +0000
+++ icu/source/layout/IndicReordering.cpp 2006-12-21 09:16:15.000000000 +0000
@@ -50,6 +50,14 @@
#define distFeatureMask 0x00010000UL
#define initFeatureMask 0x00008000UL
+// TODO: Find better names for these!
+#define tagArray4 (loclFeatureMask | nuktFeatureMask | akhnFeatureMask | vatuFeatureMask | presFeatureMask | blwsFeatureMask | abvsFeatureMask | pstsFeatureMask | halnFeatureMask | blwmFeatureMask | abvmFeatureMask | distFeatureMask)
+#define tagArray3 (pstfFeatureMask | tagArray4)
+#define tagArray2 (halfFeatureMask | tagArray3)
+#define tagArray1 (blwfFeatureMask | tagArray2)
+#define tagArray0 (rphfFeatureMask | tagArray1)
+
+
class IndicReorderingOutput : public UMemory {
private:
le_int32 fOutIndex;
@@ -154,6 +162,27 @@
fSMabove = fSMbelow = 0;
}
+ void swapChars(int a, int b)
+ {
+ LEErrorCode success = LE_NO_ERROR;
+ LEUnicode temp_char;
+ le_uint32 temp_index;
+ FeatureMask temp_tag;
+
+ temp_char = fOutChars[fOutIndex + b];
+ temp_index = fGlyphStorage.getCharIndex(fOutIndex + b, success);
+ temp_tag = fGlyphStorage.getAuxData(fOutIndex + b, success);
+
+ fOutChars[fOutIndex + b] = fOutChars[fOutIndex + a];
+ le_uint32 toswap = fGlyphStorage.getCharIndex(fOutIndex + a, success);
+ fGlyphStorage.setCharIndex(fOutIndex + b, toswap, success);
+ fGlyphStorage.setAuxData(fOutIndex + b, tagArray3, success);
+
+ fOutChars[fOutIndex + a] = temp_char;
+ fGlyphStorage.setCharIndex(fOutIndex + a, temp_index, success);
+ fGlyphStorage.setAuxData(fOutIndex + a, temp_tag, success);
+ }
+
void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask charFeatures)
{
LEErrorCode success = LE_NO_ERROR;
@@ -335,13 +364,6 @@
C_DOTTED_CIRCLE = 0x25CC
};
-// TODO: Find better names for these!
-#define tagArray4 (loclFeatureMask | nuktFeatureMask | akhnFeatureMask | vatuFeatureMask | presFeatureMask | blwsFeatureMask | abvsFeatureMask | pstsFeatureMask | halnFeatureMask | blwmFeatureMask | abvmFeatureMask | distFeatureMask)
-#define tagArray3 (pstfFeatureMask | tagArray4)
-#define tagArray2 (halfFeatureMask | tagArray3)
-#define tagArray1 (blwfFeatureMask | tagArray2)
-#define tagArray0 (rphfFeatureMask | tagArray1)
-
static const FeatureMap featureMap[] =
{
{loclFeatureTag, loclFeatureMask},
@@ -629,6 +651,21 @@
output.writeChar(chars[i], i, tagArray4);
}
+ /* for the special conjuction of Cons+0x0d4d+0x0d31 or Cons+0x0d4d+0x0d30 of Malayalam */
+ if ((baseConsonant - 2 >= 0) &&
+ (chars[baseConsonant - 1] == 0x0d4d) &&
+ ((chars[baseConsonant] == 0x0d31) ||
+ (chars[baseConsonant] == 0x0d30)) &&
+ ((chars[baseConsonant - 2] >= 0x0d15) &&
+ (chars[baseConsonant - 2] <= 0x0d39))) {
+ if (baseConsonant < 3 || chars[baseConsonant - 3] != 0x0d4d) {
+ output.swapChars(-1, -3);
+
+ if (mpreFixups)
+ mpreFixups->reduce();
+ }
+ }
+
if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) != 0) {
output.writeMbelow();
output.writeSMbelow(); // FIXME: there are no SMs in these scripts...
--- icu.orig/source/layout/MPreFixups.h 2006-11-10 09:42:47.000000000 +0000
+++ icu/source/layout/MPreFixups.h 2006-12-21 09:13:47.000000000 +0000
@@ -31,6 +31,8 @@
void apply(LEGlyphStorage &glyphStorage);
+ void reduce();
+
private:
FixupData *fFixupData;
le_int32 fFixupCount;
--- icu.orig/source/layout/MPreFixups.cpp 2006-11-10 09:42:47.000000000 +0000
+++ icu/source/layout/MPreFixups.cpp 2006-12-21 09:16:33.000000000 +0000
@@ -40,6 +40,12 @@
}
}
+void MPreFixups::reduce()
+{
+ if (fFixupCount > 0)
+ fFixupCount--;
+}
+
void MPreFixups::apply(LEGlyphStorage &glyphStorage)
{
for (le_int32 fixup = 0; fixup < fFixupCount; fixup += 1) {
icu.icu5433.oriya.patch:
--- NEW FILE icu.icu5433.oriya.patch ---
diff -ru icu.orig/source/layout/IndicClassTables.cpp icu/source/layout/IndicClassTables.cpp
--- icu.orig/source/layout/IndicClassTables.cpp 2006-10-03 14:27:47.000000000 +0100
+++ icu/source/layout/IndicClassTables.cpp 2006-10-03 14:30:07.000000000 +0100
@@ -120,6 +120,19 @@
_iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0AE0 - 0AEF
};
+#if 1
+static const IndicClassTable::CharClass oryaCharClasses[] =
+{
+ _xx, _ma, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, /* 0B00 - 0B0F */
+ _iv, _xx, _xx, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _ct, _bb, /* 0B10 - 0B1F */
+ _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _pb, /* 0B20 - 0B2F */
+ _rb, _xx, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _nu, _xx, _dr, _da, /* 0B30 - 0B3F */
+ _dr, _db, _db, _db, _xx, _xx, _xx, _dl, _s1, _xx, _xx, _s2, _s3, _vr, _xx, _xx, /* 0B40 - 0B4F */
+ _xx, _xx, _xx, _xx, _xx, _xx, _da, _dr, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _pb, /* 0B50 - 0B5F */
+ _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0B60 - 0B6F */
+ _xx, _bb /* 0B70 - 0B71 */
+};
+#else
static const IndicClassTable::CharClass oryaCharClasses[] =
{
_xx, _ma, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, // 0B00 - 0B0F
@@ -131,6 +144,7 @@
_iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0B60 - 0B6F
_xx, _ct // 0B70 - 0B71
};
+#endif
static const IndicClassTable::CharClass tamlCharClasses[] =
{
icu.icu5465.telegu.patch:
--- NEW FILE icu.icu5465.telegu.patch ---
--- icu.orig/source/layout/IndicClassTables.cpp 2007-02-05 14:44:17.000000000 +0000
+++ icu/source/layout/IndicClassTables.cpp 2007-02-05 14:47:49.000000000 +0000
@@ -145,6 +145,7 @@
};
// FIXME: Should some of the bb's be pb's? (KA, NA, MA, YA, VA, etc. (approx 13))
+#if 0
static const IndicClassTable::CharClass teluCharClasses[] =
{
_xx, _mp, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, // 0C00 - 0C0F
@@ -155,6 +156,18 @@
_xx, _xx, _xx, _xx, _xx, _da, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0C50 - 0C5F
_iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0C60 - 0C6F
};
+#else
+static const IndicClassTable::CharClass teluCharClasses[] =
+{
+ _xx, _mp, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, /* 0C00 - 0C0F */
+ _iv, _xx, _iv, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, /* 0C10 - 0C1F */
+ _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _bb, /* 0C20 - 0C2F */
+ _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _xx, _xx, _da, _da, /* 0C30 - 0C3F */
+ _da, _dr, _dr, _dr, _dr, _xx, _da, _da, _s1, _xx, _da, _da, _da, _vr, _xx, _xx, /* 0C40 - 0C4F */
+ _xx, _xx, _xx, _xx, _xx, _da, _db, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0C50 - 0C5F */
+ _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx /* 0C60 - 0C6F */
+};
+#endif
// U+CC3 and U+CC4 are _lm here not _dr since the Kannada rendering
// rules want them below and to the right of the entire cluster
icu.icu5488.assamese.patch:
--- NEW FILE icu.icu5488.assamese.patch ---
--- icu.orig/source/layout/IndicClassTables.cpp 2006-10-18 09:05:20.000000000 +0100
+++ icu/source/layout/IndicClassTables.cpp 2006-11-01 09:26:58.000000000 +0000
@@ -94,7 +94,7 @@
_dr, _db, _db, _db, _db, _xx, _xx, _l1, _dl, _xx, _xx, _s1, _s2, _vr, _xx, _xx, // 09C0 - 09CF
_xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _cn, // 09D0 - 09DF
_iv, _iv, _dv, _dv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 09E0 - 09EF
- _ct, _ct, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 09F0 - 09FA
+ _rv, _ct, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx /* 09F0 - 09FA */
};
static const IndicClassTable::CharClass punjCharClasses[] =
icu.icu5500.devicetablecrash.patch:
--- NEW FILE icu.icu5500.devicetablecrash.patch ---
--- icu.orig/source/layout/DeviceTables.cpp 2006-10-18 09:05:20.000000000 +0100
+++ icu/source/layout/DeviceTables.cpp 2006-11-08 09:08:09.000000000 +0000
@@ -22,7 +22,7 @@
le_uint16 format = SWAPW(deltaFormat) - 1;
le_int16 result = 0;
- if (ppem >= start && ppem <= SWAPW(endSize)) {
+ if (ppem >= start && ppem <= SWAPW(endSize) && format < sizeof(fieldBits)/sizeof(fieldBits[0])) {
le_uint16 sizeIndex = ppem - start;
le_uint16 bits = fieldBits[format];
le_uint16 count = 16 / bits;
icu.icu5501.sinhala.biggerexpand.patch:
--- NEW FILE icu.icu5501.sinhala.biggerexpand.patch ---
--- icu.orig/source/layout/IndicClassTables.cpp 2006-10-18 09:05:20.000000000 +0100
+++ icu/source/layout/IndicClassTables.cpp 2006-11-08 11:20:55.000000000 +0000
@@ -284,7 +284,7 @@
static const IndicClassTable mlymClassTable = {0x0D00, 0x0D6F, 3, MLYM_SCRIPT_FLAGS, mlymCharClasses, mlymSplitTable};
-static const IndicClassTable sinhClassTable = {0x0D80, 0x0DF4, 3, SINH_SCRIPT_FLAGS, sinhCharClasses, sinhSplitTable};
+static const IndicClassTable sinhClassTable = {0x0D80, 0x0DF4, 4, SINH_SCRIPT_FLAGS, sinhCharClasses, sinhSplitTable};
//
// IndicClassTable addresses
icu.icu5506.multiplevowels.patch:
--- NEW FILE icu.icu5506.multiplevowels.patch ---
diff -ur icu.orig/source/layout/IndicReordering.cpp icu/source/layout/IndicReordering.cpp
--- icu.orig/source/layout/IndicReordering.cpp 2006-11-10 09:42:44.000000000 +0000
+++ icu/source/layout/IndicReordering.cpp 2006-11-10 09:47:05.000000000 +0000
@@ -395,7 +395,7 @@
{-1, 6, 1, -1, -1, -1, -1, -1, -1, 5, 9, 5, 5, 4, 12}, // 2 - consonant with nukta
{-1, 6, 1, -1, -1, -1, -1, -1, 2, 5, 9, 5, 5, 4, 12}, // 3 - consonant
{-1, -1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, 7}, // 4 - consonant virama
- {-1, 6, 1, -1, -1, -1, -1, -1, -1, 5, -1, -1, -1, -1, -1}, // 5 - dependent vowels
+ {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 5 - dependent vowels
{-1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 6 - vowel mark
{-1, -1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, -1}, // 7 - consonant virama ZWJ, consonant ZWJ virama
{-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1}, // 8 - independent vowels that can take a virama
@@ -423,6 +423,48 @@
state = stateTable[state][charClass & CF_CLASS_MASK];
+ /*for the components of split matra*/
+ if ((charCount >= cursor + 3) &&
+ (chars[cursor] == 0x0DD9 && chars[cursor + 1] == 0x0DCF && chars[cursor + 2] == 0x0DCA)) { /*for 3 split matra of Sinhala*/
+ return cursor + 3;
+ }
+ else if ((charCount >= cursor + 3) &&
+ (chars[cursor] == 0x0CC6 && chars[cursor + 1] == 0x0CC2 && chars[cursor + 2] == 0x0CD5)) { /*for 3 split matra of Kannada*/
+ return cursor + 3;
+ }
+ /*for 2 split matra*/
+ else if (charCount >= cursor + 2) {
+ /*for Bengali*/
+ if ((chars[cursor] == 0x09C7 && chars[cursor + 1] == 0x09BE) ||
+ (chars[cursor] == 0x09C7 && chars[cursor + 1] == 0x09D7) ||
+ /*for Oriya*/
+ (chars[cursor] == 0x0B47 && chars[cursor + 1] == 0x0B3E) ||
+ (chars[cursor] == 0x0B47 && chars[cursor + 1] == 0x0B56) ||
+ (chars[cursor] == 0x0B47 && chars[cursor + 1] == 0x0B57) ||
+ /*for Tamil*/
+ (chars[cursor] == 0x0BC6 && chars[cursor + 1] == 0x0BBE) ||
+ (chars[cursor] == 0x0BC6 && chars[cursor + 1] == 0x0BD7) ||
+ (chars[cursor] == 0x0BC7 && chars[cursor + 1] == 0x0BBE) ||
+ /*for Malayalam*/
+ (chars[cursor] == 0x0D46 && chars[cursor + 1] == 0x0D3E) ||
+ (chars[cursor] == 0x0D46 && chars[cursor + 1] == 0x0D57) ||
+ (chars[cursor] == 0x0D47 && chars[cursor + 1] == 0x0D3E) ||
+ /*for Sinhala*/
+ (chars[cursor] == 0x0DD9 && chars[cursor + 1] == 0x0DCA) ||
+ (chars[cursor] == 0x0DD9 && chars[cursor + 1] == 0x0DCF) ||
+ (chars[cursor] == 0x0DD9 && chars[cursor + 1] == 0x0DDF) ||
+ (chars[cursor] == 0x0DDC && chars[cursor + 1] == 0x0DCA) ||
+ /*for Telugu*/
+ (chars[cursor] == 0x0C46 && chars[cursor + 1] == 0x0C56) ||
+ /*for Kannada*/
+ (chars[cursor] == 0x0CBF && chars[cursor + 1] == 0x0CD5) ||
+ (chars[cursor] == 0x0CC6 && chars[cursor + 1] == 0x0CD5) ||
+ (chars[cursor] == 0x0CC6 && chars[cursor + 1] == 0x0CD6) ||
+ (chars[cursor] == 0x0CC6 && chars[cursor + 1] == 0x0CC2) ||
+ (chars[cursor] == 0x0CCA && chars[cursor + 1] == 0x0CD5))
+ return cursor + 2;
+ }
+
if (state < 0) {
break;
}
icu.icu5557.safety.patch:
--- NEW FILE icu.icu5557.safety.patch ---
--- icu.orig/source/layout/CoverageTables.cpp 2007-01-09 12:57:41.000000000 +0000
+++ icu/source/layout/CoverageTables.cpp 2007-01-09 12:59:09.000000000 +0000
@@ -44,6 +44,11 @@
le_uint16 count = SWAPW(glyphCount);
le_uint8 bit = OpenTypeUtilities::highBit(count);
le_uint16 power = 1 << bit;
+
+ if (count == 0) {
+ return -1;
+ }
+
le_uint16 extra = count - power;
le_uint16 probe = power;
le_uint16 index = 0;
icu.icu5594.gujarati.patch:
--- NEW FILE icu.icu5594.gujarati.patch ---
--- icu.orig/source/layout/IndicClassTables.cpp 2007-02-09 14:26:04.000000000 +0000
+++ icu/source/layout/IndicClassTables.cpp 2007-02-13 15:41:52.000000000 +0000
@@ -117,7 +117,11 @@
_rv, _xx, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _dr, _dl, // 0AB0 - 0ABF
_dr, _db, _db, _db, _db, _da, _xx, _da, _da, _dr, _xx, _dr, _dr, _vr, _xx, _xx, // 0AC0 - 0ACF
_xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0AD0 - 0ADF
+#if 1
+ _iv, _xx, _db, _db, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0AE0 - 0AEF
+#else
_iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0AE0 - 0AEF
+#endif
};
#if 1
icu.icuXXXX.malayalam.bysyllable.patch:
--- NEW FILE icu.icuXXXX.malayalam.bysyllable.patch ---
diff -ruN icu.orig/source/layout/IndicReordering.h icu/source/layout/IndicReordering.h
--- icu.orig/source/layout/IndicReordering.h 2007-04-27 10:28:22.000000000 +0100
+++ icu/source/layout/IndicReordering.h 2007-04-27 10:39:22.000000000 +0100
@@ -142,6 +142,7 @@
// do not instantiate
IndicReordering();
+public:
static le_int32 findSyllable(const IndicClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount);
};
diff -ruN icu.orig/source/layout/LayoutEngine.cpp icu/source/layout/LayoutEngine.cpp
--- icu.orig/source/layout/LayoutEngine.cpp 2007-04-27 10:28:22.000000000 +0100
+++ icu/source/layout/LayoutEngine.cpp 2007-04-27 10:39:22.000000000 +0100
@@ -14,6 +14,7 @@
#include "CanonShaping.h"
#include "HanLayoutEngine.h"
#include "HangulLayoutEngine.h"
+#include "MalayalamLayoutEngine.h"
#include "IndicLayoutEngine.h"
#include "KhmerLayoutEngine.h"
#include "ThaiLayoutEngine.h"
@@ -451,11 +452,13 @@
if (gsubTable != NULL && gsubTable->coversScript(scriptTag = OpenTypeLayoutEngine::getScriptTag(scriptCode))) {
switch (scriptCode) {
+ case mlymScriptCode:
+ result = new MalayalamOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable);
+ break;
case bengScriptCode:
case devaScriptCode:
case gujrScriptCode:
case kndaScriptCode:
- case mlymScriptCode:
case oryaScriptCode:
case guruScriptCode:
case tamlScriptCode:
@@ -512,11 +515,13 @@
result = new GXLayoutEngine(fontInstance, scriptCode, languageCode, morphTable);
} else {
switch (scriptCode) {
+ case mlymScriptCode:
+ result = new MalayalamOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
+ break;
case bengScriptCode:
case devaScriptCode:
case gujrScriptCode:
case kndaScriptCode:
- case mlymScriptCode:
case oryaScriptCode:
case guruScriptCode:
case tamlScriptCode:
diff -ruN icu.orig/source/layout/LEGlyphStorage.h icu/source/layout/LEGlyphStorage.h
--- icu.orig/source/layout/LEGlyphStorage.h 2007-04-27 10:28:22.000000000 +0100
+++ icu/source/layout/LEGlyphStorage.h 2007-04-27 10:43:54.000000000 +0100
@@ -413,6 +413,8 @@
*/
void adoptGlyphArray(LEGlyphStorage &from);
+ void appendGlyphStorage(LEGlyphStorage &from);
+
/**
* Delete the char indices array and replace it with the one
* in <code>from</code>. Set the char indices array pointer
diff -ruN icu.orig/source/layout/Makefile.in icu/source/layout/Makefile.in
--- icu.orig/source/layout/Makefile.in 2007-04-27 10:28:22.000000000 +0100
+++ icu/source/layout/Makefile.in 2007-04-27 10:39:22.000000000 +0100
@@ -66,6 +66,7 @@
ArabicLayoutEngine.o \
GXLayoutEngine.o \
HanLayoutEngine.o \
+MalayalamLayoutEngine.o \
IndicLayoutEngine.o \
LayoutEngine.o \
ContextualGlyphSubstProc.o \
diff -ruN icu.orig/source/layout/MalayalamLayoutEngine.cpp icu/source/layout/MalayalamLayoutEngine.cpp
--- icu.orig/source/layout/MalayalamLayoutEngine.cpp 1970-01-01 01:00:00.000000000 +0100
+++ icu/source/layout/MalayalamLayoutEngine.cpp 2007-04-27 10:44:26.000000000 +0100
@@ -0,0 +1,121 @@
+
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LayoutEngine.h"
+#include "OpenTypeLayoutEngine.h"
+#include "MalayalamLayoutEngine.h"
+#include "ScriptAndLanguageTags.h"
+
+#include "GlyphSubstitutionTables.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphPositioningTables.h"
+
+#include "GDEFMarkFilter.h"
+#include "LEGlyphStorage.h"
+
+#include "IndicReordering.h"
+
+#include <stdio.h>
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(MalayalamOpenTypeLayoutEngine)
+
+void LEGlyphStorage::appendGlyphStorage(LEGlyphStorage &from)
+{
+ if (fInsertionList) applyInsertions();
+ if (from.fInsertionList) from.applyInsertions();
+
+ if (!from.fGlyphCount)
+ return;
+
+ le_int32 newGlyphCount = fGlyphCount + from.fGlyphCount;
+
+ fGlyphs = (LEGlyphID*)LE_GROW_ARRAY(fGlyphs, newGlyphCount);
+ LE_ARRAY_COPY(fGlyphs+fGlyphCount, from.fGlyphs, from.fGlyphCount);
+
+ le_int32 nLargestIndex = 0;
+ if (fGlyphCount)
+ {
+ for (le_int32 i = 0; i < fGlyphCount; ++i)
+ {
+ if (fCharIndices[i] > nLargestIndex)
+ nLargestIndex = fCharIndices[i];
+ }
+ nLargestIndex+=1;
+ }
+ fCharIndices = (le_int32 *)LE_GROW_ARRAY(fCharIndices, newGlyphCount);
+ for (le_int32 i = 0; i < from.fGlyphCount; ++i)
+ fCharIndices[fGlyphCount+i] = from.fCharIndices[i] + nLargestIndex;
+
+ fAuxData = (le_uint32 *)LE_GROW_ARRAY(fAuxData, newGlyphCount);
+ LE_ARRAY_COPY(fAuxData+fGlyphCount, from.fAuxData, from.fGlyphCount);
+
+ fGlyphCount = newGlyphCount;
+}
+
+le_int32 MalayalamOpenTypeLayoutEngine::glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ glyphStorage.appendGlyphStorage(tempGlyphStorage);
+
+ return glyphStorage.getGlyphCount();
+}
+
+
+le_int32 MalayalamOpenTypeLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ le_int32 outGlyphCount=0;
+
+ const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(fScriptCode);
+ le_int32 prev = 0;
+ while (prev < count)
+ {
+ le_int32 outCharCount=0, fakeGlyphCount=0;
+ LEUnicode *outChars = NULL;
+ LEGlyphStorage fakeGlyphStorage;
+
+ le_int32 syllable = IndicReordering::findSyllable(classTable, chars+offset, prev, count);
+ outCharCount = characterProcessing(chars+prev, offset, syllable-prev, max, rightToLeft, outChars, fakeGlyphStorage, success);
+
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (outChars != NULL) {
+ fakeGlyphCount = glyphProcessing(outChars, 0, outCharCount, outCharCount, rightToLeft, fakeGlyphStorage, success);
+ LE_DELETE_ARRAY(outChars); // FIXME: a subclass may have allocated this, in which case this delete might not work...
+ } else {
+ fakeGlyphCount = glyphProcessing(chars+prev, offset, syllable-prev, max, rightToLeft, fakeGlyphStorage, success);
+ }
+
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ outGlyphCount = glyphPostProcessing(fakeGlyphStorage, glyphStorage, success);
+
+ prev = syllable;
+ }
+
+ return outGlyphCount;
+}
+
+U_NAMESPACE_END
diff -ruN icu.orig/source/layout/MalayalamLayoutEngine.h icu/source/layout/MalayalamLayoutEngine.h
--- icu.orig/source/layout/MalayalamLayoutEngine.h 1970-01-01 01:00:00.000000000 +0100
+++ icu/source/layout/MalayalamLayoutEngine.h 2007-04-27 10:39:52.000000000 +0100
@@ -0,0 +1,41 @@
+
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#ifndef __MALAYALAMLAYOUTENGINE_H
+#define __MALAYALAMLAYOUTENGINE_H
+
+#include "IndicLayoutEngine.h"
+
+U_NAMESPACE_BEGIN
+
+class MalayalamOpenTypeLayoutEngine : public IndicOpenTypeLayoutEngine
+{
+public:
+ MalayalamOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable) :
+ IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable)
+
+ {}
+
+ MalayalamOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags) :
+ IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags)
+
+ {}
+
+ virtual UClassID getDynamicClassID() const;
+ static UClassID getStaticClassID();
+
+protected:
+ virtual le_int32 glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+};
+
+U_NAMESPACE_END
+#endif
+
icu.icuXXXX.virama.prevnext.patch:
--- NEW FILE icu.icuXXXX.virama.prevnext.patch ---
diff -ur icu.orig/source/common/rbbi.cpp icu/source/common/rbbi.cpp
--- icu.orig/source/common/rbbi.cpp 2006-10-05 11:54:13.000000000 +0100
+++ icu/source/common/rbbi.cpp 2006-10-05 11:57:31.000000000 +0100
@@ -879,6 +879,22 @@
RBBI_END // state machine processing is after end of user text.
};
+#define VIRAMA_SCRIPT(wc) ((wc) >= 0x0901 && (wc) <= 0x17FF)
+#define VIRAMA(wc) ((wc) == 0x094D || \
+ (wc) == 0x09CD || \
+ (wc) == 0x0A4D || \
+ (wc) == 0x0ACD || \
+ (wc) == 0x0B4D || \
+ (wc) == 0x0BCD || \
+ (wc) == 0x0C4D || \
+ (wc) == 0x0CCD || \
+ (wc) == 0x0D4D || \
+ (wc) == 0x0DCA || \
+ (wc) == 0x0E3A || \
+ (wc) == 0x0F84 || \
+ (wc) == 0x1039 || \
+ (wc) == 0x17D2 || \
+ (wc) == 0x200D)
//-----------------------------------------------------------------------------------
//
@@ -896,6 +911,7 @@
RBBIRunMode mode;
RBBIStateTableRow *row;
+ UChar32 prevchar;
UChar32 c;
int32_t lookaheadStatus = 0;
int32_t lookaheadTagIdx = 0;
@@ -919,6 +935,7 @@
// if we're already at the end of the text, return DONE.
initialPosition = (int32_t)UTEXT_GETNATIVEINDEX(fText);
result = initialPosition;
+ prevchar = 0;
c = UTEXT_NEXT32(fText);
if (fData == NULL || c==U_SENTINEL) {
return BreakIterator::DONE;
@@ -1001,6 +1018,11 @@
// State Transition - move machine to its next state
//
+ if (VIRAMA_SCRIPT(c) && VIRAMA(prevchar))
+ {
+ state = START_STATE;
+ row = (RBBIStateTableRow *) (tableData + tableRowLen * state);
+ }
state = row->fNextState[category];
row = (RBBIStateTableRow *)
// (statetable->fTableData + (statetable->fRowLen * state));
@@ -1059,6 +1081,7 @@
// the input position. The next iteration will be processing the
// first real input character.
if (mode == RBBI_RUN) {
+ prevchar = c;
c = UTEXT_NEXT32(fText);
} else {
if (mode == RBBI_START) {
@@ -1107,6 +1130,7 @@
int16_t category = 0;
RBBIRunMode mode;
RBBIStateTableRow *row;
+ UChar32 prevchar;
UChar32 c;
int32_t lookaheadStatus = 0;
int32_t result = 0;
@@ -1135,6 +1159,7 @@
// Set up the starting char.
initialPosition = (int32_t)UTEXT_GETNATIVEINDEX(fText);
result = initialPosition;
+ prevchar = 0;
c = UTEXT_PREVIOUS32(fText);
// Set the initial state for the state machine
@@ -1218,6 +1243,11 @@
// State Transition - move machine to its next state
//
+ if (VIRAMA_SCRIPT(prevchar) && VIRAMA(c))
+ {
+ state = START_STATE;
+ row = (RBBIStateTableRow *) (statetable->fTableData + (statetable->fRowLen * state));
+ }
state = row->fNextState[category];
row = (RBBIStateTableRow *)
(statetable->fTableData + (statetable->fRowLen * state));
@@ -1269,6 +1299,7 @@
// the input position. The next iteration will be processing the
// first real input character.
if (mode == RBBI_RUN) {
+ prevchar = c;
c = UTEXT_PREVIOUS32(fText);
} else {
if (mode == RBBI_START) {
icu.regexp.patch:
--- NEW FILE icu.regexp.patch ---
diff -ru icu.orig/source/common/uvectr32.cpp icu/source/common/uvectr32.cpp
--- icu.orig/source/common/uvectr32.cpp 2003-08-27 02:01:30.000000000 +0100
+++ icu/source/common/uvectr32.cpp 2008-01-22 08:37:06.000000000 +0000
@@ -1,6 +1,6 @@
/*
******************************************************************************
-* Copyright (C) 1999-2003, International Business Machines Corporation and *
+* Copyright (C) 1999-2008, International Business Machines Corporation and *
* others. All Rights Reserved. *
******************************************************************************
* Date Name Description
@@ -26,6 +26,7 @@
UVector32::UVector32(UErrorCode &status) :
count(0),
capacity(0),
+ maxCapacity(0),
elements(NULL)
{
_init(DEFUALT_CAPACITY, status);
@@ -34,6 +35,7 @@
UVector32::UVector32(int32_t initialCapacity, UErrorCode &status) :
count(0),
capacity(0),
+ maxCapacity(0),
elements(0)
{
_init(initialCapacity, status);
@@ -46,6 +48,9 @@
if (initialCapacity < 1) {
initialCapacity = DEFUALT_CAPACITY;
}
+ if (maxCapacity>0 && maxCapacity<initialCapacity) {
+ initialCapacity = maxCapacity;
+ }
elements = (int32_t *)uprv_malloc(sizeof(int32_t)*initialCapacity);
if (elements == 0) {
status = U_MEMORY_ALLOCATION_ERROR;
@@ -189,21 +194,35 @@
UBool UVector32::expandCapacity(int32_t minimumCapacity, UErrorCode &status) {
if (capacity >= minimumCapacity) {
return TRUE;
- } else {
- int32_t newCap = capacity * 2;
- if (newCap < minimumCapacity) {
- newCap = minimumCapacity;
- }
- int32_t* newElems = (int32_t *)uprv_malloc(sizeof(int32_t)*newCap);
- if (newElems == 0) {
- status = U_MEMORY_ALLOCATION_ERROR;
- return FALSE;
- }
- uprv_memcpy(newElems, elements, sizeof(elements[0]) * count);
- uprv_free(elements);
- elements = newElems;
- capacity = newCap;
- return TRUE;
+ }
+ if (maxCapacity>0 && minimumCapacity>maxCapacity) {
+ status = U_BUFFER_OVERFLOW_ERROR;
+ return FALSE;
+ }
+ int32_t newCap = capacity * 2;
+ if (newCap < minimumCapacity) {
+ newCap = minimumCapacity;
+ }
+ if (maxCapacity > 0 && newCap > maxCapacity) {
+ newCap = maxCapacity;
+ }
+ int32_t* newElems = (int32_t *)uprv_malloc(sizeof(int32_t)*newCap);
+ if (newElems == 0) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return FALSE;
+ }
+ uprv_memcpy(newElems, elements, sizeof(elements[0]) * count);
+ uprv_free(elements);
+ elements = newElems;
+ capacity = newCap;
+ return TRUE;
+}
+
+void UVector32::setMaxCapacity(int32_t limit) {
+ U_ASSERT(limit >= 0);
+ maxCapacity = limit;
+ if (maxCapacity < 0) {
+ maxCapacity = 0;
}
}
diff -ru icu.orig/source/common/uvectr32.h icu/source/common/uvectr32.h
--- icu.orig/source/common/uvectr32.h 2006-01-18 03:52:04.000000000 +0000
+++ icu/source/common/uvectr32.h 2008-01-22 08:37:07.000000000 +0000
@@ -1,6 +1,6 @@
/*
**********************************************************************
-* Copyright (C) 1999-2006, International Business Machines
+* Copyright (C) 1999-2008, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*/
@@ -61,6 +61,8 @@
int32_t count;
int32_t capacity;
+
+ int32_t maxCapacity; // Limit beyond which capacity is not permitted to grow.
int32_t* elements;
@@ -162,6 +164,14 @@
int32_t *getBuffer() const;
/**
+ * Set the maximum allowed buffer capacity for this vector/stack.
+ * Default with no limit set is unlimited, go until malloc() fails.
+ * A Limit of zero means unlimited capacity.
+ * Units are vector elements (32 bits each), not bytes.
+ */
+ void setMaxCapacity(int32_t limit);
+
+ /**
* ICU "poor man's RTTI", returns a UClassID for this class.
*/
static UClassID U_EXPORT2 getStaticClassID();
@@ -221,7 +231,9 @@
}
inline int32_t *UVector32::reserveBlock(int32_t size, UErrorCode &status) {
- ensureCapacity(count+size, status);
+ if (ensureCapacity(count+size, status) == FALSE) {
+ return NULL;
+ }
int32_t *rp = elements+count;
count += size;
return rp;
diff -ru icu.orig/source/i18n/regexcmp.cpp icu/source/i18n/regexcmp.cpp
--- icu.orig/source/i18n/regexcmp.cpp 2006-02-02 04:37:14.000000000 +0000
+++ icu/source/i18n/regexcmp.cpp 2008-01-22 08:37:06.000000000 +0000
@@ -1187,14 +1187,17 @@
// Because capture groups can be forward-referenced by back-references,
// we fill the operand with the capture group number. At the end
// of compilation, it will be changed to the variable's location.
- U_ASSERT(groupNum > 0);
- int32_t op;
- if (fModeFlags & UREGEX_CASE_INSENSITIVE) {
- op = URX_BUILD(URX_BACKREF_I, groupNum);
+ if (groupNum < 1) {
+ error(U_REGEX_INVALID_BACK_REF);
} else {
- op = URX_BUILD(URX_BACKREF, groupNum);
+ int32_t op;
+ if (fModeFlags & UREGEX_CASE_INSENSITIVE) {
+ op = URX_BUILD(URX_BACKREF_I, groupNum);
+ } else {
+ op = URX_BUILD(URX_BACKREF, groupNum);
+ }
+ fRXPat->fCompiledPat->addElement(op, *fStatus);
}
- fRXPat->fCompiledPat->addElement(op, *fStatus);
}
break;
diff -ru icu.orig/source/i18n/rematch.cpp icu/source/i18n/rematch.cpp
--- icu.orig/source/i18n/rematch.cpp 2005-08-25 19:02:20.000000000 +0100
+++ icu/source/i18n/rematch.cpp 2008-01-22 08:37:44.000000000 +0000
@@ -30,6 +30,15 @@
U_NAMESPACE_BEGIN
+// Limit the size of the back track stack, to avoid system failures caused
+// by heap exhaustion. Units are in 32 bit words, not bytes.
+// This value puts ICU's limits higher than most other regexp implementations,
+// which use recursion rather than the heap, and take more storage per
+// backtrack point.
+// This constant is _temporary_. Proper API to control the value will added.
+//
+static const int32_t BACKTRACK_STACK_CAPACITY = 8000000;
+
//-----------------------------------------------------------------------------
//
// Constructor and Destructor
@@ -53,6 +62,8 @@
}
if (fStack == NULL || fData == NULL) {
fDeferredStatus = U_MEMORY_ALLOCATION_ERROR;
+ } else {
+ fStack->setMaxCapacity(BACKTRACK_STACK_CAPACITY);
}
reset(*RegexStaticSets::gStaticSets->fEmptyString);
@@ -78,6 +89,8 @@
}
if (fStack == NULL || fData == NULL) {
status = U_MEMORY_ALLOCATION_ERROR;
+ } else {
+ fStack->setMaxCapacity(BACKTRACK_STACK_CAPACITY);
}
reset(input);
}
@@ -102,6 +115,8 @@
}
if (fStack == NULL || fData == NULL) {
status = U_MEMORY_ALLOCATION_ERROR;
+ } else {
+ fStack->setMaxCapacity(BACKTRACK_STACK_CAPACITY);
}
reset(*RegexStaticSets::gStaticSets->fEmptyString);
}
@@ -1015,6 +1030,14 @@
inline REStackFrame *RegexMatcher::StateSave(REStackFrame *fp, int32_t savePatIdx, int32_t frameSize, UErrorCode &status) {
// push storage for a new frame.
int32_t *newFP = fStack->reserveBlock(frameSize, status);
+ if (newFP == NULL) {
+ // Heap allocation error on attempted stack expansion.
+ // We need to return a writable stack frame, so just return the
+ // previous frame. The match operation will stop quickly
+ // becuase of the error status, after which the frame will never
+ // be looked at again.
+ return fp;
+ }
fp = (REStackFrame *)(newFP - frameSize); // in case of realloc of stack.
// New stack frame = copy of old top frame.
@@ -1030,8 +1053,8 @@
fp->fPatIdx = savePatIdx;
return (REStackFrame *)newFP;
}
-
-
+
+
//--------------------------------------------------------------------------------
//
// MatchAt This is the actual matching engine.
@@ -2262,6 +2285,7 @@
}
if (U_FAILURE(status)) {
+ isMatch = FALSE;
break;
}
}
diff -ru icu.orig/source/test/intltest/regextst.cpp icu/source/test/intltest/regextst.cpp
--- icu.orig/source/test/intltest/regextst.cpp 2005-07-05 19:39:00.000000000 +0100
+++ icu/source/test/intltest/regextst.cpp 2008-01-22 08:38:21.000000000 +0000
@@ -66,6 +66,10 @@
case 6: name = "PerlTests";
if (exec) PerlTests();
break;
+ case 7: name = "Bug 6149";
+ if (exec) Bug6149();
+ break;
+
default: name = "";
@@ -1637,6 +1641,13 @@
// UnicodeSet containing a string
REGEX_ERR("abc[{def}]xyz", 1, 10, U_REGEX_SET_CONTAINS_STRING);
+
+ // Invalid Back Reference \0
+ // For ICU 3.8 and earlier
+ // For ICU versions newer than 3.8, \0 introduces an octal escape.
+ //
+ REGEX_ERR("(ab)\\0", 1, 6, U_REGEX_INVALID_BACK_REF);
+
}
@@ -2119,6 +2130,26 @@
}
+//--------------------------------------------------------------
+//
+// Bug6149 Verify limits to heap expansion for backtrack stack.
+// Use this pattern,
+// "(a?){1,}"
+// The zero-length match will repeat forever.
+// (That this goes into a loop is another bug)
+//
+//---------------------------------------------------------------
+void RegexTest::Bug6149() {
+ UnicodeString pattern("(a?){1,}");
+ UnicodeString s("xyz");
+ uint32_t flags = 0;
+ UErrorCode status = U_ZERO_ERROR;
+
+ RegexMatcher matcher(pattern, s, flags, status);
+ UBool result = false;
+ REGEX_ASSERT_FAIL(result=matcher.matches(status), U_BUFFER_OVERFLOW_ERROR);
+ REGEX_ASSERT(result == FALSE);
+ }
#endif /* !UCONFIG_NO_REGULAR_EXPRESSIONS */
diff -ru icu.orig/source/test/intltest/regextst.h icu/source/test/intltest/regextst.h
--- icu.orig/source/test/intltest/regextst.h 2003-12-03 06:58:28.000000000 +0000
+++ icu/source/test/intltest/regextst.h 2008-01-22 08:37:06.000000000 +0000
@@ -30,6 +30,7 @@
virtual void Extended();
virtual void Errors();
virtual void PerlTests();
+ virtual void Bug6149();
// The following functions are internal to the regexp tests.
virtual UBool doRegexLMTest(const char *pat, const char *text, UBool looking, UBool match, int line);
Index: icu.spec
===================================================================
RCS file: /cvs/pkgs/rpms/icu/EL-4/icu.spec,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- icu.spec 4 Dec 2006 18:10:58 -0000 1.2
+++ icu.spec 27 Jan 2008 13:05:11 -0000 1.3
@@ -1,19 +1,30 @@
-Name: icu
-Version: 3.6
-Release: 4%{dist}
-Summary: International Components for Unicode
-
-Group: System Environment/Libraries
-License: X License
-URL: http://www.ibm.com/software/globalization/icu/
-Source0: ftp://ftp.software.ibm.com/software/globalization/icu/icu4c-3_6-src.tgz
-BuildRoot: %{_tmppath}/%{name}-%{version}-root
-
+Name: icu
+Version: 3.6
+Release: 4%{dist}.20
+Summary: International Components for Unicode
+Group: System Environment/Libraries
+License: MIT
+URL: http://www.ibm.com/software/globalization/icu/
+Source0: ftp://ftp.software.ibm.com/software/globalization/icu/3.6/icu4c-3_6-src.tgz
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: doxygen, autoconf
-Patch1: icu-3.4-multiarchdevel.patch
-Patch2: icu-config
-Patch3: icu.icu5365.dependantvowels.patch
-Patch4: icu.icu5418.malayam.patch
+
+Patch1: icu-3.4-multiarchdevel.patch
+Patch2: icu-config
+Patch3: icu.icu5365.dependantvowels.patch
+Patch4: icu.icu5418.malayam.patch
+Patch5: icu.icu5431.malayam.patch
+Patch6: icu.icu5433.oriya.patch
+Patch7: icu.icuXXXX.virama.prevnext.patch
+Patch8: icu.icu5465.telegu.patch
+Patch9: icu.icu5488.assamese.patch
+Patch10: icu.icu5500.devicetablecrash.patch
+Patch11: icu.icu5501.sinhala.biggerexpand.patch
+Patch12: icu.icu5557.safety.patch
+Patch13: icu.icu5506.multiplevowels.patch
+Patch14: icu.icu5594.gujarati.patch
+Patch15: icu.icuXXXX.malayalam.bysyllable.patch
+Patch16: icu.regexp.patch
%description
The International Components for Unicode (ICU) libraries provide
@@ -27,34 +38,45 @@
sacrificing performance. It offers great flexibility to extend and
customize the supplied services.
-%package -n lib%{name}
-Summary: International Components for Unicode - libraries
-Group: System Environment/Libraries
+%package -n lib%{name}
+Summary: International Components for Unicode - libraries
+Group: System Environment/Libraries
%description -n lib%{name}
%{summary}.
-%package -n lib%{name}-devel
-Summary: Development files for International Components for Unicode
-Group: Development/Libraries
-Requires: lib%{name} = %{version}-%{release}
+%package -n lib%{name}-devel
+Summary: Development files for International Components for Unicode
+Group: Development/Libraries
+Requires: lib%{name} = %{version}-%{release}
+Requires: pkgconfig
%description -n lib%{name}-devel
%{summary}.
-%package -n lib%{name}-doc
-Summary: Documentation for International Components for Unicode
-Group: Documentation
+%package -n lib%{name}-doc
+Summary: Documentation for International Components for Unicode
+Group: Documentation
%description -n lib%{name}-doc
%{summary}.
-
%prep
%setup -q -n %{name}
-%patch1 -p1 -b .multiarchdevel
-%patch3 -p1 -b .dependantvowels
-%patch4 -p1 -b .malayam.patch
+%patch1 -p1 -b .multiarchdevel
+%patch3 -p1 -b .dependantvowels
+%patch4 -p1 -b .icu5418.malayam.patch
+%patch5 -p1 -b .icu5431.malayam.patch
+%patch6 -p1 -b .icu5433.oriya.patch
+%patch7 -p1 -b .icuXXXX.virama.prevnext.patch
+%patch8 -p1 -b .icu5465.telegu.patch
+%patch9 -p1 -b .icu5488.assamese.patch
+%patch10 -p1 -b .icu5500.devicetablecrash.patch
+%patch11 -p1 -b .icu5501.sinhala.biggerexpand.patch
+%patch12 -p1 -b .icu5557.safety.patch
+%patch13 -p1 -b .icu5506.multiplevowels.patch
+%patch15 -p1 -b .icuXXXX.malayalam.bysyllable.patch
+%patch16 -p1 -b .regexp.patch
%build
cd source
@@ -70,7 +92,7 @@
make -C source install DESTDIR=$RPM_BUILD_ROOT
make -C source install-doc docdir=__docs
chmod +x $RPM_BUILD_ROOT%{_libdir}/*.so.*
-cp %{PATCH2} $RPM_BUILD_ROOT%{_bindir}/%{name}-config
+cp -p %{PATCH2} $RPM_BUILD_ROOT%{_bindir}/%{name}-config
chmod a+x $RPM_BUILD_ROOT%{_bindir}/%{name}-config
sed -i s/\\\$\(THREADSCXXFLAGS\)// $RPM_BUILD_ROOT/%{_libdir}/pkgconfig/icu.pc
sed -i s/\\\$\(THREADSCPPFLAGS\)/-D_REENTRANT/ $RPM_BUILD_ROOT/%{_libdir}/pkgconfig/icu.pc
@@ -78,16 +100,13 @@
%check || :
make -C source check
-
%clean
rm -rf $RPM_BUILD_ROOT
-
%post -n lib%{name} -p /sbin/ldconfig
%postun -n lib%{name} -p /sbin/ldconfig
-
%files
%defattr(-,root,root,-)
%doc license.html readme.html
@@ -133,8 +152,61 @@
%defattr(-,root,root,-)
%doc source/__docs/%{name}/html/*
-
%changelog
+* Sun Jan 26 2008 Thorsten Leemhuis <fedora AT leemhuis DOT info> - 3.6-4.20
+- Sync with F7 3.6-20, but ship as 3.6-4.20 to have a proper updates path
+ EPEL4 (old icu) -> RHEL5 (is has icu-3.6-5.11 right now)
+
+* Thu Jan 24 2008 Caolan McNamara <caolanm at redhat.com> - 3.6-20
+- CVE-2007-4770 CVE-2007-4771 add icu.regexp.patch
+
+* Mon Apr 30 2007 Caolan McNamara <caolanm at redhat.com> - 3.6-19
+- Resolves: rhbz#220867 Malayalam rendering
+
+* Tue Feb 13 2007 Caolan McNamara <caolanm at redhat.com> - 3.6-18
+- Resolves: rhbz#228457 icu.icu5594.gujarati.patch
+
+* Mon Feb 09 2007 Caolan McNamara <caolanm at redhat.com> - 3.6-17
+- spec cleanups
+
+* Mon Feb 05 2007 Caolan McNamara <caolanm at redhat.com> - 3.6-16
+- Resolves: rhbz#226949 layout telegu like pango
+
+* Fri Jan 19 2007 Caolan McNamara <caolanm at redhat.com> - 3.6-15
+- Resolves: rhbz#214948 icu.icu5506.multiplevowels.patch
+
+* Thu Jan 09 2007 Caolan McNamara <caolanm at redhat.com> - 3.6-14
+- Related: rhbz#216089 add icu.icu5557.safety.patch
+
+* Thu Dec 21 2006 Caolan McNamara <caolanm at redhat.com> - 3.6-13
+- Resolves: rhbz#220433 modify icu.icu5431.malayam.patch
+
+* Fri Nov 10 2006 Caolan McNamara <caolanm at redhat.com> - 3.6-12
+- Resolves: rhbz#214948 icu.icu5506.multiplevowels.patch
+
+* Wed Nov 08 2006 Caolan McNamara <caolanm at redhat.com> - 3.6-11
+- Resolves: rhbz#214555 icu.icu5501.sinhala.biggerexpand.patch
+
+* Wed Nov 08 2006 Caolan McNamara <caolanm at redhat.com> - 3.6-10
+- Resolves: rhbz#214555 icu.icu5500.devicetablecrash.patch
+
+* Thu Oct 18 2006 Caolan McNamara <caolanm at redhat.com> - 3.6-9
+- Resolves: rhbz#213648 extend prev/next to handle ZWJ
+
+* Tue Oct 18 2006 Caolan McNamara <caolanm at redhat.com> - 3.6-8
+- Resolves: rhbz213375 (icu.icu5488.assamese.patch)
+
+* Tue Oct 18 2006 Caolan McNamara <caolanm at redhat.com> - 3.6-7
+- Resolves: rhbz#211258 (icu.icu5465.telegu.patch)
+
+* Thu Oct 05 2006 Caolan McNamara <caolanm at redhat.com> - 3.6-6
+- rh#209391# add icu.icuXXXX.virama.prevnext.patch
+
+* Mon Oct 02 2006 Caolan McNamara <caolanm at redhat.com> - 3.6-5
+- rh#208705# add pkg-config Require for -devel package
+- add icu.icu5431.malayam.patch for rh#208551#/rh#209084#
+- add icu.icu5433.oriya.patch for rh#208559#/rh#209083#
+
* Sun Oct 01 2006 Jesse Keating <jkeating at redhat.com> - 3.6-4
- rebuilt for unwind info generation, broken in gcc-4.1.1-21
More information about the fedora-extras-commits
mailing list