guibuilder_pel7x64builder0
6 years ago
33 changed files with 21616 additions and 0 deletions
@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
|
||||
diff -ru orig.icu/source/layout/IndicReordering.cpp icu/source/layout/IndicReordering.cpp |
||||
--- orig.icu/source/layout/IndicReordering.cpp 2016-04-15 18:30:15.788856946 +0200 |
||||
+++ icu/source/layout/IndicReordering.cpp 2016-04-15 18:30:39.244998995 +0200 |
||||
@@ -13,6 +13,7 @@ |
||||
|
||||
U_NAMESPACE_BEGIN |
||||
|
||||
+#define ccmpFeatureTag LE_CCMP_FEATURE_TAG |
||||
#define loclFeatureTag LE_LOCL_FEATURE_TAG |
||||
#define initFeatureTag LE_INIT_FEATURE_TAG |
||||
#define nuktFeatureTag LE_NUKT_FEATURE_TAG |
||||
@@ -35,6 +36,7 @@ |
||||
#define caltFeatureTag LE_CALT_FEATURE_TAG |
||||
#define kernFeatureTag LE_KERN_FEATURE_TAG |
||||
|
||||
+#define ccmpFeatureMask 0x00000001UL |
||||
#define loclFeatureMask 0x80000000UL |
||||
#define rphfFeatureMask 0x40000000UL |
||||
#define blwfFeatureMask 0x20000000UL |
||||
@@ -73,7 +75,7 @@ |
||||
|
||||
#define repositionedGlyphMask 0x00000002UL |
||||
|
||||
-#define basicShapingFormsMask ( loclFeatureMask | nuktFeatureMask | akhnFeatureMask | rkrfFeatureMask | blwfFeatureMask | halfFeatureMask | vatuFeatureMask | cjctFeatureMask ) |
||||
+#define basicShapingFormsMask ( ccmpFeatureMask | loclFeatureMask | nuktFeatureMask | akhnFeatureMask | rkrfFeatureMask | blwfFeatureMask | halfFeatureMask | vatuFeatureMask | cjctFeatureMask ) |
||||
#define positioningFormsMask ( kernFeatureMask | distFeatureMask | abvmFeatureMask | blwmFeatureMask ) |
||||
#define presentationFormsMask ( presFeatureMask | abvsFeatureMask | blwsFeatureMask | pstsFeatureMask | halnFeatureMask | caltFeatureMask ) |
||||
|
||||
@@ -484,6 +486,7 @@ |
||||
#define tagArray0 (rphfFeatureMask | tagArray1) |
||||
|
||||
static const FeatureMap featureMap[] = { |
||||
+ {ccmpFeatureTag, ccmpFeatureMask}, |
||||
{loclFeatureTag, loclFeatureMask}, |
||||
{initFeatureTag, initFeatureMask}, |
||||
{nuktFeatureTag, nuktFeatureMask}, |
||||
@@ -506,6 +509,7 @@ |
||||
static const le_int32 featureCount = LE_ARRAY_SIZE(featureMap); |
||||
|
||||
static const FeatureMap v2FeatureMap[] = { |
||||
+ {ccmpFeatureTag, ccmpFeatureMask}, |
||||
{loclFeatureTag, loclFeatureMask}, |
||||
{nuktFeatureTag, nuktFeatureMask}, |
||||
{akhnFeatureTag, akhnFeatureMask}, |
@ -0,0 +1,129 @@
@@ -0,0 +1,129 @@
|
||||
Index: icu/trunk/source/layout/IndicReordering.cpp |
||||
=================================================================== |
||||
--- icu/trunk/source/layout/IndicReordering.cpp (revision 25772) |
||||
+++ icu/trunk/source/layout/IndicReordering.cpp (revision 26090) |
||||
@@ -126,4 +126,8 @@ |
||||
FeatureMask fSMFeatures; |
||||
|
||||
+ LEUnicode fPreBaseConsonant; |
||||
+ LEUnicode fPreBaseVirama; |
||||
+ le_int32 fPBCIndex; |
||||
+ FeatureMask fPBCFeatures; |
||||
|
||||
void saveMatra(LEUnicode matra, le_int32 matraIndex, IndicClassTable::CharClass matraClass) |
||||
@@ -172,5 +176,6 @@ |
||||
fMatraFeatures(0), fMPreOutIndex(-1), fMPreFixups(mpreFixups), |
||||
fVMabove(0), fVMpost(0), fVMIndex(0), fVMFeatures(0), |
||||
- fSMabove(0), fSMbelow(0), fSMIndex(0), fSMFeatures(0) |
||||
+ fSMabove(0), fSMbelow(0), fSMIndex(0), fSMFeatures(0), |
||||
+ fPreBaseConsonant(0), fPreBaseVirama(0), fPBCIndex(0), fPBCFeatures(0) |
||||
{ |
||||
// nothing else to do... |
||||
@@ -191,4 +196,6 @@ |
||||
fVMabove = fVMpost = 0; |
||||
fSMabove = fSMbelow = 0; |
||||
+ |
||||
+ fPreBaseConsonant = fPreBaseVirama = 0; |
||||
} |
||||
|
||||
@@ -386,4 +393,12 @@ |
||||
} |
||||
|
||||
+ void notePreBaseConsonant(le_uint32 index,LEUnicode PBConsonant, LEUnicode PBVirama, FeatureMask features) |
||||
+ { |
||||
+ fPBCIndex = index; |
||||
+ fPreBaseConsonant = PBConsonant; |
||||
+ fPreBaseVirama = PBVirama; |
||||
+ fPBCFeatures = features; |
||||
+ } |
||||
+ |
||||
void noteBaseConsonant() |
||||
{ |
||||
@@ -465,4 +480,20 @@ |
||||
} |
||||
|
||||
+ void writePreBaseConsonant() |
||||
+ { |
||||
+ // The TDIL spec says that consonant + virama + RRA should produce a rakar in Malayalam. However, |
||||
+ // it seems that almost none of the fonts for Malayalam are set up to handle this. |
||||
+ // So, we're going to force the issue here by using the rakar as defined with RA in most fonts. |
||||
+ |
||||
+ if (fPreBaseConsonant == 0x0d31) { // RRA |
||||
+ fPreBaseConsonant = 0x0d30; // RA |
||||
+ } |
||||
+ |
||||
+ if (fPreBaseConsonant != 0) { |
||||
+ writeChar(fPreBaseConsonant, fPBCIndex, fPBCFeatures); |
||||
+ writeChar(fPreBaseVirama,fPBCIndex-1,fPBCFeatures); |
||||
+ } |
||||
+ } |
||||
+ |
||||
le_int32 getOutputIndex() |
||||
{ |
||||
@@ -723,4 +754,5 @@ |
||||
} |
||||
|
||||
+ |
||||
IndicClassTable::CharClass charClass = CC_RESERVED; |
||||
IndicClassTable::CharClass nextClass = CC_RESERVED; |
||||
@@ -730,7 +762,9 @@ |
||||
le_bool seenVattu = FALSE; |
||||
le_bool seenBelowBaseForm = FALSE; |
||||
+ le_bool seenPreBaseForm = FALSE; |
||||
le_bool hasNukta = FALSE; |
||||
le_bool hasBelowBaseForm = FALSE; |
||||
le_bool hasPostBaseForm = FALSE; |
||||
+ le_bool hasPreBaseForm = FALSE; |
||||
|
||||
if (postBase < markStart && classTable->isNukta(chars[postBase])) { |
||||
@@ -746,12 +780,20 @@ |
||||
hasBelowBaseForm = IndicClassTable::hasBelowBaseForm(charClass) && !hasNukta; |
||||
hasPostBaseForm = IndicClassTable::hasPostBaseForm(charClass) && !hasNukta; |
||||
+ hasPreBaseForm = IndicClassTable::hasPreBaseForm(charClass) && !hasNukta; |
||||
|
||||
if (IndicClassTable::isConsonant(charClass)) { |
||||
if (postBaseLimit == 0 || seenVattu || |
||||
(baseConsonant > baseLimit && !classTable->isVirama(chars[baseConsonant - 1])) || |
||||
- !(hasBelowBaseForm || hasPostBaseForm)) { |
||||
+ !(hasBelowBaseForm || hasPostBaseForm || hasPreBaseForm)) { |
||||
break; |
||||
} |
||||
|
||||
+ // Note any pre-base consonants |
||||
+ if ( baseConsonant == lastConsonant && lastConsonant > 0 && |
||||
+ hasPreBaseForm && classTable->isVirama(chars[baseConsonant - 1])) { |
||||
+ output.notePreBaseConsonant(lastConsonant,chars[lastConsonant],chars[lastConsonant-1],tagArray2); |
||||
+ seenPreBaseForm = TRUE; |
||||
+ |
||||
+ } |
||||
// consonants with nuktas are never vattus |
||||
seenVattu = IndicClassTable::isVattu(charClass) && !hasNukta; |
||||
@@ -786,10 +828,12 @@ |
||||
|
||||
// write any pre-base consonants |
||||
+ output.writePreBaseConsonant(); |
||||
+ |
||||
le_bool supressVattu = TRUE; |
||||
|
||||
for (i = baseLimit; i < baseConsonant; i += 1) { |
||||
LEUnicode ch = chars[i]; |
||||
- // Don't put 'blwf' on first consonant. |
||||
- FeatureMask features = (i == baseLimit? tagArray2 : tagArray1); |
||||
+ // Don't put 'pstf' or 'blwf' on anything before the base consonant. |
||||
+ FeatureMask features = tagArray1 & ~( pstfFeatureMask | blwfFeatureMask ); |
||||
|
||||
charClass = classTable->getCharClass(ch); |
||||
@@ -842,5 +886,5 @@ |
||||
|
||||
// write below-base consonants |
||||
- if (baseConsonant != lastConsonant) { |
||||
+ if (baseConsonant != lastConsonant && !seenPreBaseForm) { |
||||
for (i = bcSpan + 1; i < postBase; i += 1) { |
||||
output.writeChar(chars[i], i, tagArray1); |
||||
@@ -872,5 +916,5 @@ |
||||
// write post-base consonants |
||||
// FIXME: does this put the right tags on post-base consonants? |
||||
- if (baseConsonant != lastConsonant) { |
||||
+ if (baseConsonant != lastConsonant && !seenPreBaseForm) { |
||||
if (postBase <= lastConsonant) { |
||||
for (i = postBase; i <= lastConsonant; i += 1) { |
@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
|
||||
diff -ru orig.icu/source/layout/LookupProcessor.cpp icu/source/layout/LookupProcessor.cpp |
||||
--- orig.icu/source/layout/LookupProcessor.cpp 2016-03-23 21:56:44.000000000 +0100 |
||||
+++ icu/source/layout/LookupProcessor.cpp 2016-04-15 18:19:26.903927005 +0200 |
||||
@@ -223,7 +223,9 @@ |
||||
|
||||
if (requiredFeatureIndex != 0xFFFF) { |
||||
requiredFeatureTable = featureListTable->getFeatureTable(featureListTable, requiredFeatureIndex, &requiredFeatureTag, success); |
||||
- featureReferences += SWAPW(requiredFeatureTable->lookupCount); |
||||
+ if (requiredFeatureTable.isValid()) { |
||||
+ featureReferences += SWAPW(requiredFeatureTable->lookupCount); |
||||
+ } |
||||
} |
||||
|
||||
lookupOrderArray = LE_NEW_ARRAY(le_uint16, featureReferences); |
@ -0,0 +1,96 @@
@@ -0,0 +1,96 @@
|
||||
diff -ru orig.icu/source/test/cintltst/cnmdptst.c icu/source/test/cintltst/cnmdptst.c |
||||
--- orig.icu/source/test/cintltst/cnmdptst.c 2016-03-23 21:48:18.000000000 +0100 |
||||
+++ icu/source/test/cintltst/cnmdptst.c 2016-04-15 18:34:06.148251985 +0200 |
||||
@@ -186,6 +186,12 @@ |
||||
/* Test exponential pattern*/ |
||||
static void TestExponential(void) |
||||
{ |
||||
+/* erAck: fails on armv7hl, https://bugzilla.redhat.com/show_bug.cgi?id=1239574 */ |
||||
+#if 1 |
||||
+ /* Actually only 3 tests fail, but given the nested structure depending on |
||||
+ * array sizes there's no simple "disable this and that". */ |
||||
+ return; |
||||
+#endif |
||||
int32_t pat_length, val_length, lval_length; |
||||
int32_t ival, ilval, p, v, lneed; |
||||
UNumberFormat *fmt; |
||||
diff -ru orig.icu/source/test/intltest/dcfmtest.cpp icu/source/test/intltest/dcfmtest.cpp |
||||
--- orig.icu/source/test/intltest/dcfmtest.cpp 2016-03-23 21:48:38.000000000 +0100 |
||||
+++ icu/source/test/intltest/dcfmtest.cpp 2016-04-15 18:34:06.148251985 +0200 |
||||
@@ -279,6 +279,13 @@ |
||||
// |
||||
formatLineMat.reset(testLine); |
||||
if (formatLineMat.lookingAt(status)) { |
||||
+/* erAck: fails on armv7hl, https://bugzilla.redhat.com/show_bug.cgi?id=1239574 */ |
||||
+#if 1 |
||||
+// [Formattable] file dcfmtest.txt, line 62: expected "12.35E5", got "1.235E6" |
||||
+// [StringPiece] file dcfmtest.txt, line 62: expected "12.35E5", got "1.235E6" |
||||
+ if (lineNum == 62) |
||||
+ continue; |
||||
+#endif |
||||
execFormatTest(lineNum, |
||||
formatLineMat.group(1, status), // Pattern |
||||
formatLineMat.group(2, status), // rounding mode |
||||
diff -ru orig.icu/source/test/intltest/numfmtspectest.cpp icu/source/test/intltest/numfmtspectest.cpp |
||||
--- orig.icu/source/test/intltest/numfmtspectest.cpp 2016-03-23 21:48:40.000000000 +0100 |
||||
+++ icu/source/test/intltest/numfmtspectest.cpp 2016-04-15 18:34:06.148251985 +0200 |
||||
@@ -137,11 +137,14 @@ |
||||
|
||||
void NumberFormatSpecificationTest::TestScientificNotation() { |
||||
assertPatternFr("1,23E4", 12345.0, "0.00E0", TRUE); |
||||
+/* erAck: fails on armv7hl, https://bugzilla.redhat.com/show_bug.cgi?id=1239574 */ |
||||
+#if 0 |
||||
assertPatternFr("123,00E2", 12300.0, "000.00E0", TRUE); |
||||
assertPatternFr("123,0E2", 12300.0, "000.0#E0", TRUE); |
||||
assertPatternFr("123,0E2", 12300.1, "000.0#E0", TRUE); |
||||
assertPatternFr("123,01E2", 12301.0, "000.0#E0", TRUE); |
||||
assertPatternFr("123,01E+02", 12301.0, "000.0#E+00", TRUE); |
||||
+#endif |
||||
assertPatternFr("12,3E3", 12345.0, "##0.00E0", TRUE); |
||||
assertPatternFr("12,300E3", 12300.1, "##0.0000E0", TRUE); |
||||
assertPatternFr("12,30E3", 12300.1, "##0.000#E0", TRUE); |
||||
@@ -221,6 +224,8 @@ |
||||
assertEquals("", "USD (433.22)", result, TRUE); |
||||
} |
||||
} |
||||
+/* erAck: fails on armv7hl, https://bugzilla.redhat.com/show_bug.cgi?id=1239574 */ |
||||
+#if 0 |
||||
const char *paddedSciPattern = "QU**00.#####E0"; |
||||
assertPatternFr("QU***43,3E-1", 4.33, paddedSciPattern, TRUE); |
||||
{ |
||||
@@ -242,6 +247,7 @@ |
||||
} |
||||
// padding cannot work as intended with scientific notation. |
||||
assertPatternFr("QU**43,32E-1", 4.332, paddedSciPattern, TRUE); |
||||
+#endif |
||||
} |
||||
|
||||
void NumberFormatSpecificationTest::assertPatternFr( |
||||
diff -ru orig.icu/source/test/intltest/numfmtst.cpp icu/source/test/intltest/numfmtst.cpp |
||||
--- orig.icu/source/test/intltest/numfmtst.cpp 2016-03-23 21:48:40.000000000 +0100 |
||||
+++ icu/source/test/intltest/numfmtst.cpp 2016-04-15 18:34:06.150251997 +0200 |
||||
@@ -730,6 +730,12 @@ |
||||
void |
||||
NumberFormatTest::TestExponential(void) |
||||
{ |
||||
+/* erAck: fails on armv7hl, https://bugzilla.redhat.com/show_bug.cgi?id=1239574 */ |
||||
+#if 1 |
||||
+ /* Actually only 3 tests fail, but given the nested structure depending on |
||||
+ * array sizes there's no simple "disable this and that". */ |
||||
+ return; |
||||
+#endif |
||||
UErrorCode status = U_ZERO_ERROR; |
||||
DecimalFormatSymbols sym(Locale::getUS(), status); |
||||
if (U_FAILURE(status)) { errcheckln(status, "FAIL: Bad status returned by DecimalFormatSymbols ct - %s", u_errorName(status)); return; } |
||||
@@ -1846,8 +1852,11 @@ |
||||
(int32_t) 45678000, "5E7", status); |
||||
expect(new DecimalFormat("00E0", US, status), |
||||
(int32_t) 45678000, "46E6", status); |
||||
+/* erAck: fails on armv7hl, https://bugzilla.redhat.com/show_bug.cgi?id=1239574 */ |
||||
+#if 0 |
||||
expect(new DecimalFormat("000E0", US, status), |
||||
(int32_t) 45678000, "457E5", status); |
||||
+#endif |
||||
/* |
||||
expect(new DecimalFormat("###E0", US, status), |
||||
new Object[] { new Double(0.0000123), "12.3E-6", |
@ -0,0 +1,156 @@
@@ -0,0 +1,156 @@
|
||||
Index: icu/trunk/source/common/locid.cpp |
||||
=================================================================== |
||||
--- icu/source/common/locid.cpp (revision 39282) |
||||
+++ icu/source/common/locid.cpp (revision 39384) |
||||
@@ -45,4 +45,5 @@ |
||||
#include "ucln_cmn.h" |
||||
#include "ustr_imp.h" |
||||
+#include "charstr.h" |
||||
|
||||
U_CDECL_BEGIN |
||||
@@ -59,4 +60,10 @@ |
||||
static UHashtable *gDefaultLocalesHashT = NULL; |
||||
static Locale *gDefaultLocale = NULL; |
||||
+ |
||||
+/** |
||||
+ * \def ULOC_STRING_LIMIT |
||||
+ * strings beyond this value crash in CharString |
||||
+ */ |
||||
+#define ULOC_STRING_LIMIT 357913941 |
||||
|
||||
U_NAMESPACE_END |
||||
@@ -286,5 +293,5 @@ |
||||
else |
||||
{ |
||||
- MaybeStackArray<char, ULOC_FULLNAME_CAPACITY> togo; |
||||
+ UErrorCode status = U_ZERO_ERROR; |
||||
int32_t size = 0; |
||||
int32_t lsize = 0; |
||||
@@ -292,5 +299,4 @@ |
||||
int32_t vsize = 0; |
||||
int32_t ksize = 0; |
||||
- char *p; |
||||
|
||||
// Calculate the size of the resulting string. |
||||
@@ -300,6 +306,12 @@ |
||||
{ |
||||
lsize = (int32_t)uprv_strlen(newLanguage); |
||||
+ if ( lsize < 0 || lsize > ULOC_STRING_LIMIT ) { // int32 wrap |
||||
+ setToBogus(); |
||||
+ return; |
||||
+ } |
||||
size = lsize; |
||||
} |
||||
+ |
||||
+ CharString togo(newLanguage, lsize, status); // start with newLanguage |
||||
|
||||
// _Country |
||||
@@ -307,4 +319,8 @@ |
||||
{ |
||||
csize = (int32_t)uprv_strlen(newCountry); |
||||
+ if ( csize < 0 || csize > ULOC_STRING_LIMIT ) { // int32 wrap |
||||
+ setToBogus(); |
||||
+ return; |
||||
+ } |
||||
size += csize; |
||||
} |
||||
@@ -321,4 +337,8 @@ |
||||
// remove trailing _'s |
||||
vsize = (int32_t)uprv_strlen(newVariant); |
||||
+ if ( vsize < 0 || vsize > ULOC_STRING_LIMIT ) { // int32 wrap |
||||
+ setToBogus(); |
||||
+ return; |
||||
+ } |
||||
while( (vsize>1) && (newVariant[vsize-1] == SEP_CHAR) ) |
||||
{ |
||||
@@ -345,48 +365,30 @@ |
||||
{ |
||||
ksize = (int32_t)uprv_strlen(newKeywords); |
||||
+ if ( ksize < 0 || ksize > ULOC_STRING_LIMIT ) { |
||||
+ setToBogus(); |
||||
+ return; |
||||
+ } |
||||
size += ksize + 1; |
||||
} |
||||
|
||||
- |
||||
// NOW we have the full locale string.. |
||||
- |
||||
- /*if the whole string is longer than our internal limit, we need |
||||
- to go to the heap for temporary buffers*/ |
||||
- if (size >= togo.getCapacity()) |
||||
- { |
||||
- // If togo_heap could not be created, initialize with default settings. |
||||
- if (togo.resize(size+1) == NULL) { |
||||
- init(NULL, FALSE); |
||||
- } |
||||
- } |
||||
- |
||||
- togo[0] = 0; |
||||
- |
||||
// Now, copy it back. |
||||
- p = togo.getAlias(); |
||||
- if ( lsize != 0 ) |
||||
- { |
||||
- uprv_strcpy(p, newLanguage); |
||||
- p += lsize; |
||||
- } |
||||
+ |
||||
+ // newLanguage is already copied |
||||
|
||||
if ( ( vsize != 0 ) || (csize != 0) ) // at least: __v |
||||
{ // ^ |
||||
- *p++ = SEP_CHAR; |
||||
+ togo.append(SEP_CHAR, status); |
||||
} |
||||
|
||||
if ( csize != 0 ) |
||||
{ |
||||
- uprv_strcpy(p, newCountry); |
||||
- p += csize; |
||||
+ togo.append(newCountry, status); |
||||
} |
||||
|
||||
if ( vsize != 0) |
||||
{ |
||||
- *p++ = SEP_CHAR; // at least: __v |
||||
- |
||||
- uprv_strncpy(p, newVariant, vsize); // Must use strncpy because |
||||
- p += vsize; // of trimming (above). |
||||
- *p = 0; // terminate |
||||
+ togo.append(SEP_CHAR, status) |
||||
+ .append(newVariant, vsize, status); |
||||
} |
||||
|
||||
@@ -394,19 +396,23 @@ |
||||
{ |
||||
if (uprv_strchr(newKeywords, '=')) { |
||||
- *p++ = '@'; /* keyword parsing */ |
||||
+ togo.append('@', status); /* keyword parsing */ |
||||
} |
||||
else { |
||||
- *p++ = '_'; /* Variant parsing with a script */ |
||||
+ togo.append('_', status); /* Variant parsing with a script */ |
||||
if ( vsize == 0) { |
||||
- *p++ = '_'; /* No country found */ |
||||
+ togo.append('_', status); /* No country found */ |
||||
} |
||||
} |
||||
- uprv_strcpy(p, newKeywords); |
||||
- p += ksize; |
||||
- } |
||||
- |
||||
+ togo.append(newKeywords, status); |
||||
+ } |
||||
+ |
||||
+ if (U_FAILURE(status)) { |
||||
+ // Something went wrong with appending, etc. |
||||
+ setToBogus(); |
||||
+ return; |
||||
+ } |
||||
// Parse it, because for example 'language' might really be a complete |
||||
// string. |
||||
- init(togo.getAlias(), FALSE); |
||||
+ init(togo.data(), FALSE); |
||||
} |
||||
} |
@ -0,0 +1,16 @@
@@ -0,0 +1,16 @@
|
||||
diff -up icu/source/configure.ac.dont_use_clang_even_if_installed icu/source/configure.ac |
||||
--- icu/source/configure.ac.dont_use_clang_even_if_installed 2017-02-10 13:36:23.708830671 +0100 |
||||
+++ icu/source/configure.ac 2017-02-10 13:37:00.618423307 +0100 |
||||
@@ -132,10 +132,10 @@ AC_SUBST(ENABLE_RELEASE) |
||||
: ${CXXFLAGS=""} |
||||
|
||||
# Checks for compilers |
||||
-AC_PROG_CC([clang gcc cc c99 c89 xlc_r xlc cl.exe icc]) |
||||
+AC_PROG_CC([gcc cc c99 c89 xlc_r xlc cl.exe icc]) |
||||
# Make sure that we try clang++ first, which provides C++11 support. |
||||
# The g++ compiler is less likely to support C++11. |
||||
-AC_PROG_CXX([clang++ g++ c++ gpp xlC_r xlC aCC CC cxx cc++ cl.exe icc FCC KCC RCC]) |
||||
+AC_PROG_CXX([g++ c++ gpp xlC_r xlC aCC CC cxx cc++ cl.exe icc FCC KCC RCC]) |
||||
|
||||
# pkg-config is needed for harfbuzz support |
||||
PKG_PROG_PKG_CONFIG([0.20]) |
@ -0,0 +1,128 @@
@@ -0,0 +1,128 @@
|
||||
Description: supply manual page for program that doesn't have one |
||||
Author: Jay Berkenbilt <qjb@debian.org> |
||||
Bug: http://bugs.icu-project.org/trac/ticket/7554 |
||||
|
||||
diff -r -u -N icu.orig/source/tools/gennorm2/gennorm2.8.in icu/source/tools/gennorm2/gennorm2.8.in |
||||
--- icu.orig/source/tools/gennorm2/gennorm2.8.in 1970-01-01 01:00:00.000000000 +0100 |
||||
+++ icu/source/tools/gennorm2/gennorm2.8.in 2013-02-25 16:43:28.297062638 +0100 |
||||
@@ -0,0 +1,71 @@ |
||||
+.\" Hey, Emacs! This is -*-nroff-*- you know... |
||||
+.\" |
||||
+.\" gennorm2.8: manual page for the gennorm2 utility |
||||
+.\" |
||||
+.\" Copyright (C) 2005-2006 International Business Machines Corporation and others |
||||
+.\" |
||||
+.TH GENNORM2 8 "15 March 2010" "ICU MANPAGE" "ICU @VERSION@ Manual" |
||||
+.SH NAME |
||||
+.B gennorm2 |
||||
+\- Builds binary data file with Unicode normalization data. |
||||
+.SH SYNOPSIS |
||||
+.B gennorm2 |
||||
+[ |
||||
+.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" |
||||
+] |
||||
+[ |
||||
+.BR "\-V\fP, \fB\-\-version" |
||||
+] |
||||
+[ |
||||
+.BR "\-c\fP, \fB\-\-copyright" |
||||
+] |
||||
+[ |
||||
+.BR "\-v\fP, \fB\-\-verbose" |
||||
+] |
||||
+[ |
||||
+.BI "\-u\fP, \fB\-\-unicode" " unicode\-version\-number" |
||||
+] |
||||
+[ |
||||
+.BI "\-s\fP, \fB\-\-sourcedir" " source\-directory" |
||||
+] |
||||
+[ |
||||
+.BI "\-o\fP, \fB\-\-output" " output\-filename" |
||||
+] |
||||
+.BI "\fB\-\-fast" |
||||
+.SH DESCRIPTION |
||||
+.B gennorm2 |
||||
+reads text files that define Unicode normalization, |
||||
+them, and builds a binary data file. |
||||
+.SH OPTIONS |
||||
+.TP |
||||
+.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" |
||||
+Print help about usage and exit. |
||||
+.TP |
||||
+.BR "\-V\fP, \fB\-\-version" |
||||
+Print the version of |
||||
+.B gennorm2 |
||||
+and exit. |
||||
+.TP |
||||
+.BR "\-c\fP, \fB\-\-copyright" |
||||
+Include a copyright notice. |
||||
+.TP |
||||
+.BR "\-v\fP, \fB\-\-verbose" |
||||
+Display extra informative messages during execution. |
||||
+.TP |
||||
+.BR "\-u\fP, \fB\-\-unicode" |
||||
+Specify Unicode version number, such as 5.2.0. |
||||
+.TP |
||||
+.BI "\-s\fP, \fB\-\-sourcedir" " source\-directory" |
||||
+Specify the input directory. |
||||
+.TP |
||||
+.BI "\-s\fP, \fB\-\-sourcedir" " source\-directory" |
||||
+Set the name of the output file. |
||||
+.TP |
||||
+.BI "\fB\-\-fast" |
||||
+optimize the .nrm file for fast normalization, |
||||
+which might increase its size (Writes fully decomposed |
||||
+regular mappings instead of delta mappings. |
||||
+You should measure the runtime speed to make sure that |
||||
+this is a good trade-off.) |
||||
+.SH COPYRIGHT |
||||
+Copyright (C) 2009-2010 International Business Machines Corporation and others |
||||
diff -r -u -N icu.orig/source/tools/gennorm2/Makefile.in icu/source/tools/gennorm2/Makefile.in |
||||
--- icu.orig/source/tools/gennorm2/Makefile.in 2013-01-11 01:23:32.000000000 +0100 |
||||
+++ icu/source/tools/gennorm2/Makefile.in 2013-02-25 16:43:28.296062632 +0100 |
||||
@@ -16,8 +16,13 @@ |
||||
|
||||
TARGET_STUB_NAME = gennorm2 |
||||
|
||||
+SECTION = 8 |
||||
+ |
||||
+MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) |
||||
+ |
||||
+ |
||||
## Extra files to remove for 'make clean' |
||||
-CLEANFILES = *~ $(DEPS) |
||||
+CLEANFILES = *~ $(DEPS) $(MAN_FILES) |
||||
|
||||
## Target information |
||||
TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT) |
||||
@@ -44,12 +49,16 @@ |
||||
dist: dist-local |
||||
check: all check-local |
||||
|
||||
-all-local: $(TARGET) |
||||
+all-local: $(TARGET) $(MAN_FILES) |
||||
|
||||
-install-local: all-local |
||||
+install-local: all-local install-man |
||||
$(MKINSTALLDIRS) $(DESTDIR)$(sbindir) |
||||
$(INSTALL) $(TARGET) $(DESTDIR)$(sbindir) |
||||
|
||||
+install-man: $(MAN_FILES) |
||||
+ $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) |
||||
+ $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) |
||||
+ |
||||
dist-local: |
||||
|
||||
clean-local: |
||||
@@ -70,6 +79,11 @@ |
||||
$(POST_BUILD_STEP) |
||||
|
||||
|
||||
+%.$(SECTION): $(srcdir)/%.$(SECTION).in |
||||
+ cd $(top_builddir) \ |
||||
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status |
||||
+ |
||||
+ |
||||
ifeq (,$(MAKECMDGOALS)) |
||||
-include $(DEPS) |
||||
else |
@ -0,0 +1,145 @@
@@ -0,0 +1,145 @@
|
||||
Description: supply manual page for program that doesn't have one |
||||
Author: Jay Berkenbilt <qjb@debian.org> |
||||
Bug: http://bugs.icu-project.org/trac/ticket/7665 |
||||
erAck: adapted to ICU 56.1 icu/source/tools/icuinfo/Makefile.in |
||||
|
||||
diff -Nur orig.icu/source/tools/icuinfo/icuinfo.1.in icu/source/tools/icuinfo/icuinfo.1.in |
||||
--- orig.icu/source/tools/icuinfo/icuinfo.1.in 1970-01-01 01:00:00.000000000 +0100 |
||||
+++ icu/source/tools/icuinfo/icuinfo.1.in 2015-10-27 19:19:35.184056800 +0100 |
||||
@@ -0,0 +1,76 @@ |
||||
+.\" Hey, Emacs! This is -*-nroff-*- you know... |
||||
+.\" |
||||
+.\" icuinfo.1: manual page for the icuinfo utility |
||||
+.\" |
||||
+.\" Copyright (C) 2005-2006 International Business Machines Corporation and others |
||||
+.\" |
||||
+.TH ICUINFO 1 "1 May 2010" "ICU MANPAGE" "ICU @VERSION@ Manual" |
||||
+.SH NAME |
||||
+.B icuinfo |
||||
+\- Shows some basic info about the current ICU |
||||
+.SH SYNOPSIS |
||||
+.B icuinfo |
||||
+[ |
||||
+.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" |
||||
+] |
||||
+[ |
||||
+.BR "\-V\fP, \fB\-\-version" |
||||
+] |
||||
+[ |
||||
+.BR "\-c\fP, \fB\-\-copyright" |
||||
+] |
||||
+[ |
||||
+.BI "\-i\fP, \fB\-\-icudatadir" " directory" |
||||
+] |
||||
+[ |
||||
+.BR "\-v\fP, \fB\-\-verbose" |
||||
+] |
||||
+[ |
||||
+.BI "\-L\fP, \fB\-\-list-plugins" |
||||
+] |
||||
+[ |
||||
+.BI "\-m\fP, \fB\-\-milisecond-time" |
||||
+] |
||||
+[ |
||||
+.BI "\-K\fP, \fB\-\-cleanup" |
||||
+] |
||||
+.SH DESCRIPTION |
||||
+.B icuinfo |
||||
+prints basic information about the current version of ICU. |
||||
+.SH OPTIONS |
||||
+.TP |
||||
+.BR "\-h\fP, \fB\-?\fP, \fB\-\-help" |
||||
+Print help about usage and exit. |
||||
+.TP |
||||
+.BR "\-V\fP, \fB\-\-version" |
||||
+Print the version of |
||||
+.B icuinfo |
||||
+and exit. |
||||
+.TP |
||||
+.BR "\-c\fP, \fB\-\-copyright" |
||||
+Embeds the standard ICU copyright into the |
||||
+.IR output-file . |
||||
+.TP |
||||
+.BR "\-v\fP, \fB\-\-verbose" |
||||
+Display extra informative messages during execution. |
||||
+.TP |
||||
+.BI "\-i\fP, \fB\-\-icudatadir" " directory" |
||||
+Look for any necessary ICU data files in |
||||
+.IR directory . |
||||
+For example, the file |
||||
+.B pnames.icu |
||||
+must be located when ICU's data is not built as a shared library. |
||||
+The default ICU data directory is specified by the environment variable |
||||
+.BR ICU_DATA . |
||||
+Most configurations of ICU do not require this argument. |
||||
+.TP |
||||
+.BI "\-L\fP, \fB\-\-list-plugins" |
||||
+If specified, list and diagnose issues with ICU plugins. |
||||
+.TP |
||||
+.BI "\-K\fP, \fB\-\-cleanup" |
||||
+Attempt to unload plugins before exiting. |
||||
+.TP |
||||
+.BI "\-m\fP, \fB\-\-milisecond-time" |
||||
+Print the current UTC time in milliseconds. |
||||
+.SH COPYRIGHT |
||||
+Copyright (C) 2010 International Business Machines Corporation and others |
||||
diff -Nur orig.icu/source/tools/icuinfo/Makefile.in icu/source/tools/icuinfo/Makefile.in |
||||
--- orig.icu/source/tools/icuinfo/Makefile.in 2015-10-08 05:53:56.000000000 +0200 |
||||
+++ icu/source/tools/icuinfo/Makefile.in 2015-10-27 19:23:19.115509906 +0100 |
||||
@@ -14,8 +14,15 @@ |
||||
## Build directory information |
||||
subdir = tools/icuinfo |
||||
|
||||
+TARGET_STUB_NAME = icuinfo |
||||
+ |
||||
+SECTION = 1 |
||||
+ |
||||
+MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) |
||||
+ |
||||
+ |
||||
## Extra files to remove for 'make clean' |
||||
-CLEANFILES = *~ $(DEPS) $(PLUGIN_OBJECTS) $(PLUGINFILE) $(PLUGIN) |
||||
+CLEANFILES = *~ $(DEPS) $(PLUGIN_OBJECTS) $(PLUGINFILE) $(PLUGIN) $(MAN_FILES) |
||||
|
||||
## Target information |
||||
TARGET = icuinfo$(EXEEXT) |
||||
@@ -35,7 +42,8 @@ |
||||
|
||||
## List of phony targets |
||||
.PHONY : all all-local install install-local clean clean-local \ |
||||
-distclean distclean-local dist dist-local check check-local plugin-check |
||||
+distclean distclean-local dist dist-local check check-local plugin-check \ |
||||
+install-man |
||||
|
||||
## Clear suffix list |
||||
.SUFFIXES : |
||||
@@ -48,12 +56,16 @@ |
||||
dist: dist-local |
||||
check: all check-local |
||||
|
||||
-all-local: $(TARGET) |
||||
+all-local: $(TARGET) $(MAN_FILES) |
||||
|
||||
-install-local: all-local |
||||
+install-local: all-local install-man |
||||
$(MKINSTALLDIRS) $(DESTDIR)$(bindir) |
||||
$(INSTALL) $(TARGET) $(DESTDIR)$(bindir) |
||||
|
||||
+install-man: $(MAN_FILES) |
||||
+ $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION) |
||||
+ $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION) |
||||
+ |
||||
dist-local: |
||||
|
||||
clean-local: |
||||
@@ -103,6 +115,10 @@ |
||||
@echo "Plugins are disabled (use --enable-plugins to enable)" |
||||
endif |
||||
|
||||
+%.$(SECTION): $(srcdir)/%.$(SECTION).in |
||||
+ cd $(top_builddir) \ |
||||
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status |
||||
+ |
||||
ifeq (,$(MAKECMDGOALS)) |
||||
-include $(DEPS) |
||||
else |
@ -0,0 +1,244 @@
@@ -0,0 +1,244 @@
|
||||
# Offsets corected from https://ssl.icu-project.org/trac/changeset/39109 |
||||
diff -ru icu.orig/source/common/uloc.cpp icu/source/common/uloc.cpp |
||||
--- icu.orig/source/common/uloc.cpp 2016-03-23 21:50:12.000000000 +0100 |
||||
+++ icu/source/common/uloc.cpp 2016-11-01 15:21:16.542151312 +0100 |
||||
@@ -2246,7 +2246,7 @@ |
||||
typedef struct { |
||||
float q; |
||||
int32_t dummy; /* to avoid uninitialized memory copy from qsort */ |
||||
- char *locale; |
||||
+ char locale[ULOC_FULLNAME_CAPACITY+1]; |
||||
} _acceptLangItem; |
||||
|
||||
static int32_t U_CALLCONV |
||||
@@ -2288,9 +2288,7 @@ |
||||
UEnumeration* availableLocales, |
||||
UErrorCode *status) |
||||
{ |
||||
- _acceptLangItem *j; |
||||
- _acceptLangItem smallBuffer[30]; |
||||
- char **strs; |
||||
+ MaybeStackArray<_acceptLangItem, 4> items; // Struct for collecting items. |
||||
char tmp[ULOC_FULLNAME_CAPACITY +1]; |
||||
int32_t n = 0; |
||||
const char *itemEnd; |
||||
@@ -2300,11 +2298,7 @@ |
||||
int32_t res; |
||||
int32_t i; |
||||
int32_t l = (int32_t)uprv_strlen(httpAcceptLanguage); |
||||
- int32_t jSize; |
||||
- char *tempstr; /* Use for null pointer check */ |
||||
|
||||
- j = smallBuffer; |
||||
- jSize = UPRV_LENGTHOF(smallBuffer); |
||||
if(U_FAILURE(*status)) { |
||||
return -1; |
||||
} |
||||
@@ -2332,27 +2326,29 @@ |
||||
while(isspace(*t)) { |
||||
t++; |
||||
} |
||||
- j[n].q = (float)_uloc_strtod(t,NULL); |
||||
+ items[n].q = (float)_uloc_strtod(t,NULL); |
||||
} else { |
||||
/* no semicolon - it's 1.0 */ |
||||
- j[n].q = 1.0f; |
||||
+ items[n].q = 1.0f; |
||||
paramEnd = itemEnd; |
||||
} |
||||
- j[n].dummy=0; |
||||
+ items[n].dummy=0; |
||||
/* eat spaces prior to semi */ |
||||
for(t=(paramEnd-1);(paramEnd>s)&&isspace(*t);t--) |
||||
; |
||||
- /* Check for null pointer from uprv_strndup */ |
||||
- tempstr = uprv_strndup(s,(int32_t)((t+1)-s)); |
||||
- if (tempstr == NULL) { |
||||
- *status = U_MEMORY_ALLOCATION_ERROR; |
||||
- return -1; |
||||
- } |
||||
- j[n].locale = tempstr; |
||||
- uloc_canonicalize(j[n].locale,tmp,UPRV_LENGTHOF(tmp),status); |
||||
- if(strcmp(j[n].locale,tmp)) { |
||||
- uprv_free(j[n].locale); |
||||
- j[n].locale=uprv_strdup(tmp); |
||||
+ int32_t slen = ((t+1)-s); |
||||
+ if(slen > ULOC_FULLNAME_CAPACITY) { |
||||
+ *status = U_BUFFER_OVERFLOW_ERROR; |
||||
+ return -1; // too big |
||||
+ } |
||||
+ uprv_strncpy(items[n].locale, s, slen); |
||||
+ items[n].locale[slen]=0; // terminate |
||||
+ int32_t clen = uloc_canonicalize(items[n].locale, tmp, UPRV_LENGTHOF(tmp)-1, status); |
||||
+ if(U_FAILURE(*status)) return -1; |
||||
+ if((clen!=slen) || (uprv_strncmp(items[n].locale, tmp, slen))) { |
||||
+ // canonicalization had an effect- copy back |
||||
+ uprv_strncpy(items[n].locale, tmp, clen); |
||||
+ items[n].locale[clen] = 0; // terminate |
||||
} |
||||
#if defined(ULOC_DEBUG) |
||||
/*fprintf(stderr,"%d: s <%s> q <%g>\n", n, j[n].locale, j[n].q);*/ |
||||
@@ -2362,63 +2358,29 @@ |
||||
while(*s==',') { /* eat duplicate commas */ |
||||
s++; |
||||
} |
||||
- if(n>=jSize) { |
||||
- if(j==smallBuffer) { /* overflowed the small buffer. */ |
||||
- j = static_cast<_acceptLangItem *>(uprv_malloc(sizeof(j[0])*(jSize*2))); |
||||
- if(j!=NULL) { |
||||
- uprv_memcpy(j,smallBuffer,sizeof(j[0])*jSize); |
||||
- } |
||||
+ if(n>=items.getCapacity()) { // If we need more items |
||||
+ if(NULL == items.resize(items.getCapacity()*2, items.getCapacity())) { |
||||
+ *status = U_MEMORY_ALLOCATION_ERROR; |
||||
+ return -1; |
||||
+ } |
||||
#if defined(ULOC_DEBUG) |
||||
- fprintf(stderr,"malloced at size %d\n", jSize); |
||||
+ fprintf(stderr,"malloced at size %d\n", items.getCapacity()); |
||||
#endif |
||||
- } else { |
||||
- j = static_cast<_acceptLangItem *>(uprv_realloc(j, sizeof(j[0])*jSize*2)); |
||||
-#if defined(ULOC_DEBUG) |
||||
- fprintf(stderr,"re-alloced at size %d\n", jSize); |
||||
-#endif |
||||
- } |
||||
- jSize *= 2; |
||||
- if(j==NULL) { |
||||
- *status = U_MEMORY_ALLOCATION_ERROR; |
||||
- return -1; |
||||
- } |
||||
} |
||||
} |
||||
- uprv_sortArray(j, n, sizeof(j[0]), uloc_acceptLanguageCompare, NULL, TRUE, status); |
||||
+ uprv_sortArray(items.getAlias(), n, sizeof(items[0]), uloc_acceptLanguageCompare, NULL, TRUE, status); |
||||
+ LocalArray<const char*> strs(new const char*[n], *status); |
||||
if(U_FAILURE(*status)) { |
||||
- if(j != smallBuffer) { |
||||
-#if defined(ULOC_DEBUG) |
||||
- fprintf(stderr,"freeing j %p\n", j); |
||||
-#endif |
||||
- uprv_free(j); |
||||
- } |
||||
- return -1; |
||||
- } |
||||
- strs = static_cast<char **>(uprv_malloc((size_t)(sizeof(strs[0])*n))); |
||||
- /* Check for null pointer */ |
||||
- if (strs == NULL) { |
||||
- uprv_free(j); /* Free to avoid memory leak */ |
||||
- *status = U_MEMORY_ALLOCATION_ERROR; |
||||
- return -1; |
||||
+ return -1; |
||||
} |
||||
for(i=0;i<n;i++) { |
||||
#if defined(ULOC_DEBUG) |
||||
/*fprintf(stderr,"%d: s <%s> q <%g>\n", i, j[i].locale, j[i].q);*/ |
||||
#endif |
||||
- strs[i]=j[i].locale; |
||||
+ strs[i]=items[i].locale; |
||||
} |
||||
res = uloc_acceptLanguage(result, resultAvailable, outResult, |
||||
- (const char**)strs, n, availableLocales, status); |
||||
- for(i=0;i<n;i++) { |
||||
- uprv_free(strs[i]); |
||||
- } |
||||
- uprv_free(strs); |
||||
- if(j != smallBuffer) { |
||||
-#if defined(ULOC_DEBUG) |
||||
- fprintf(stderr,"freeing j %p\n", j); |
||||
-#endif |
||||
- uprv_free(j); |
||||
- } |
||||
+ strs.getAlias(), n, availableLocales, status); |
||||
return res; |
||||
} |
||||
|
||||
diff -ru icu.orig/source/test/cintltst/cloctst.c icu/source/test/cintltst/cloctst.c |
||||
--- icu.orig/source/test/cintltst/cloctst.c 2016-03-23 21:48:18.000000000 +0100 |
||||
+++ icu/source/test/cintltst/cloctst.c 2016-11-01 15:21:16.544151315 +0100 |
||||
@@ -2775,16 +2775,20 @@ |
||||
const char *icuSet; /**< ? */ |
||||
const char *expect; /**< The expected locale result */ |
||||
UAcceptResult res; /**< The expected error code */ |
||||
+ UErrorCode expectStatus; /**< expected status */ |
||||
} tests[] = { |
||||
- /*0*/{ 0, NULL, "mt_MT", ULOC_ACCEPT_VALID }, |
||||
- /*1*/{ 1, NULL, "en", ULOC_ACCEPT_VALID }, |
||||
- /*2*/{ 2, NULL, "en", ULOC_ACCEPT_FALLBACK }, |
||||
- /*3*/{ 3, NULL, "", ULOC_ACCEPT_FAILED }, |
||||
- /*4*/{ 4, NULL, "es", ULOC_ACCEPT_VALID }, |
||||
- |
||||
- /*5*/{ 5, NULL, "en", ULOC_ACCEPT_VALID }, /* XF */ |
||||
- /*6*/{ 6, NULL, "ja", ULOC_ACCEPT_FALLBACK }, /* XF */ |
||||
- /*7*/{ 7, NULL, "zh", ULOC_ACCEPT_FALLBACK }, /* XF */ |
||||
+ /*0*/{ 0, NULL, "mt_MT", ULOC_ACCEPT_VALID, U_ZERO_ERROR}, |
||||
+ /*1*/{ 1, NULL, "en", ULOC_ACCEPT_VALID, U_ZERO_ERROR}, |
||||
+ /*2*/{ 2, NULL, "en", ULOC_ACCEPT_FALLBACK, U_ZERO_ERROR}, |
||||
+ /*3*/{ 3, NULL, "", ULOC_ACCEPT_FAILED, U_ZERO_ERROR}, |
||||
+ /*4*/{ 4, NULL, "es", ULOC_ACCEPT_VALID, U_ZERO_ERROR}, |
||||
+ /*5*/{ 5, NULL, "en", ULOC_ACCEPT_VALID, U_ZERO_ERROR}, /* XF */ |
||||
+ /*6*/{ 6, NULL, "ja", ULOC_ACCEPT_FALLBACK, U_ZERO_ERROR}, /* XF */ |
||||
+ /*7*/{ 7, NULL, "zh", ULOC_ACCEPT_FALLBACK, U_ZERO_ERROR}, /* XF */ |
||||
+ /*8*/{ 8, NULL, "", ULOC_ACCEPT_FAILED, U_ZERO_ERROR }, /* */ |
||||
+ /*9*/{ 9, NULL, "", ULOC_ACCEPT_FAILED, U_ZERO_ERROR }, /* */ |
||||
+ /*10*/{10, NULL, "", ULOC_ACCEPT_FAILED, U_BUFFER_OVERFLOW_ERROR }, /* */ |
||||
+ /*11*/{11, NULL, "", ULOC_ACCEPT_FAILED, U_BUFFER_OVERFLOW_ERROR }, /* */ |
||||
}; |
||||
const int32_t numTests = UPRV_LENGTHOF(tests); |
||||
static const char *http[] = { |
||||
@@ -2800,10 +2804,25 @@ |
||||
"xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, " |
||||
"xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xx-yy;q=.1, " |
||||
"es", |
||||
- |
||||
/*5*/ "zh-xx;q=0.9, en;q=0.6", |
||||
/*6*/ "ja-JA", |
||||
/*7*/ "zh-xx;q=0.9", |
||||
+ /*08*/ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" |
||||
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" |
||||
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" |
||||
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", // 156 |
||||
+ /*09*/ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" |
||||
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" |
||||
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" |
||||
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB", // 157 (this hits U_STRING_NOT_TERMINATED_WARNING ) |
||||
+ /*10*/ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" |
||||
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" |
||||
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" |
||||
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABC", // 158 |
||||
+ /*11*/ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" |
||||
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" |
||||
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" |
||||
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", // 163 bytes |
||||
}; |
||||
|
||||
for(i=0;i<numTests;i++) { |
||||
@@ -2818,17 +2837,22 @@ |
||||
(void)rc; /* Suppress set but not used warning. */ |
||||
uenum_close(available); |
||||
log_verbose(" got %s, %s [%s]\n", tmp[0]?tmp:"(EMPTY)", acceptResult(outResult), u_errorName(status)); |
||||
- if(outResult != tests[i].res) { |
||||
+ if(status != tests[i].expectStatus) { |
||||
+ log_err_status(status, "FAIL: expected status %s but got %s\n", u_errorName(tests[i].expectStatus), u_errorName(status)); |
||||
+ } else if(U_SUCCESS(tests[i].expectStatus)) { |
||||
+ /* don't check content if expected failure */ |
||||
+ if(outResult != tests[i].res) { |
||||
log_err_status(status, "FAIL: #%d: expected outResult of %s but got %s\n", i, |
||||
acceptResult( tests[i].res), |
||||
acceptResult( outResult)); |
||||
log_info("test #%d: http[%s], ICU[%s], expect %s, %s\n", |
||||
i, http[tests[i].httpSet], tests[i].icuSet, tests[i].expect,acceptResult(tests[i].res)); |
||||
- } |
||||
- if((outResult>0)&&uprv_strcmp(tmp, tests[i].expect)) { |
||||
- log_err_status(status, "FAIL: #%d: expected %s but got %s\n", i, tests[i].expect, tmp); |
||||
- log_info("test #%d: http[%s], ICU[%s], expect %s, %s\n", |
||||
- i, http[tests[i].httpSet], tests[i].icuSet, tests[i].expect, acceptResult(tests[i].res)); |
||||
+ } |
||||
+ if((outResult>0)&&uprv_strcmp(tmp, tests[i].expect)) { |
||||
+ log_err_status(status, "FAIL: #%d: expected %s but got %s\n", i, tests[i].expect, tmp); |
||||
+ log_info("test #%d: http[%s], ICU[%s], expect %s, %s\n", |
||||
+ i, http[tests[i].httpSet], tests[i].icuSet, tests[i].expect, acceptResult(tests[i].res)); |
||||
+ } |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,156 @@
@@ -0,0 +1,156 @@
|
||||
# https://ssl.icu-project.org/trac/changeset/39671 |
||||
Index: /trunk/icu4c/source/common/utext.cpp |
||||
=================================================================== |
||||
--- icu.orig/source/common/utext.cpp |
||||
+++ icu/source/common/utext.cpp |
||||
@@ -848,7 +848,13 @@ |
||||
|
||||
// Chunk size. |
||||
-// Must be less than 85, because of byte mapping from UChar indexes to native indexes. |
||||
-// Worst case is three native bytes to one UChar. (Supplemenaries are 4 native bytes |
||||
-// to two UChars.) |
||||
+// Must be less than 42 (256/6), because of byte mapping from UChar indexes to native indexes. |
||||
+// Worst case there are six UTF-8 bytes per UChar. |
||||
+// obsolete 6 byte form fd + 5 trails maps to fffd |
||||
+// obsolete 5 byte form fc + 4 trails maps to fffd |
||||
+// non-shortest 4 byte forms maps to fffd |
||||
+// normal supplementaries map to a pair of utf-16, two utf8 bytes per utf-16 unit |
||||
+// mapToUChars array size must allow for the worst case, 6. |
||||
+// This could be brought down to 4, by treating fd and fc as pure illegal, |
||||
+// rather than obsolete lead bytes. But that is not compatible with the utf-8 access macros. |
||||
// |
||||
enum { UTF8_TEXT_CHUNK_SIZE=32 }; |
||||
@@ -890,5 +896,5 @@ |
||||
// one for a supplementary starting in the last normal position, |
||||
// and one for an entry for the buffer limit position. |
||||
- uint8_t mapToUChars[UTF8_TEXT_CHUNK_SIZE*3+6]; // Map native offset from bufNativeStart to |
||||
+ uint8_t mapToUChars[UTF8_TEXT_CHUNK_SIZE*6+6]; // Map native offset from bufNativeStart to |
||||
// correspoding offset in filled part of buf. |
||||
int32_t align; |
||||
@@ -1033,4 +1039,5 @@ |
||||
u8b = (UTF8Buf *)ut->p; // the current buffer |
||||
mapIndex = ix - u8b->toUCharsMapStart; |
||||
+ U_ASSERT(mapIndex < (int32_t)sizeof(UTF8Buf::mapToUChars)); |
||||
ut->chunkOffset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx; |
||||
return TRUE; |
||||
@@ -1299,4 +1306,8 @@ |
||||
// If index is at the end, there is no character there to look at. |
||||
if (ix != ut->b) { |
||||
+ // Note: this function will only move the index back if it is on a trail byte |
||||
+ // and there is a preceding lead byte and the sequence from the lead |
||||
+ // through this trail could be part of a valid UTF-8 sequence |
||||
+ // Otherwise the index remains unchanged. |
||||
U8_SET_CP_START(s8, 0, ix); |
||||
} |
||||
@@ -1312,5 +1323,8 @@ |
||||
uint8_t *mapToNative = u8b->mapToNative; |
||||
uint8_t *mapToUChars = u8b->mapToUChars; |
||||
- int32_t toUCharsMapStart = ix - (UTF8_TEXT_CHUNK_SIZE*3 + 1); |
||||
+ int32_t toUCharsMapStart = ix - sizeof(UTF8Buf::mapToUChars) + 1; |
||||
+ // Note that toUCharsMapStart can be negative. Happens when the remaining |
||||
+ // text from current position to the beginning is less than the buffer size. |
||||
+ // + 1 because mapToUChars must have a slot at the end for the bufNativeLimit entry. |
||||
int32_t destIx = UTF8_TEXT_CHUNK_SIZE+2; // Start in the overflow region |
||||
// at end of buffer to leave room |
||||
@@ -1339,4 +1353,5 @@ |
||||
// Special case ASCII range for speed. |
||||
buf[destIx] = (UChar)c; |
||||
+ U_ASSERT(toUCharsMapStart <= srcIx); |
||||
mapToUChars[srcIx - toUCharsMapStart] = (uint8_t)destIx; |
||||
mapToNative[destIx] = (uint8_t)(srcIx - toUCharsMapStart); |
||||
@@ -1368,4 +1383,5 @@ |
||||
mapToUChars[sIx-- - toUCharsMapStart] = (uint8_t)destIx; |
||||
} while (sIx >= srcIx); |
||||
+ U_ASSERT(toUCharsMapStart <= (srcIx+1)); |
||||
|
||||
// Set native indexing limit to be the current position. |
||||
@@ -1542,4 +1558,5 @@ |
||||
U_ASSERT(index<=ut->chunkNativeLimit); |
||||
int32_t mapIndex = index - u8b->toUCharsMapStart; |
||||
+ U_ASSERT(mapIndex < (int32_t)sizeof(UTF8Buf::mapToUChars)); |
||||
int32_t offset = u8b->mapToUChars[mapIndex] - u8b->bufStartIdx; |
||||
U_ASSERT(offset>=0 && offset<=ut->chunkLength); |
||||
Index: /trunk/icu4c/source/test/intltest/utxttest.cpp |
||||
=================================================================== |
||||
--- icu.orig/source/test/intltest/utxttest.cpp |
||||
+++ icu/source/test/intltest/utxttest.cpp |
||||
@@ -68,4 +68,6 @@ |
||||
case 7: name = "Ticket12130"; |
||||
if (exec) Ticket12130(); break; |
||||
+ case 8: name = "Ticket12888"; |
||||
+ if (exec) Ticket12888(); break; |
||||
default: name = ""; break; |
||||
} |
||||
@@ -1584,2 +1586,62 @@ |
||||
utext_close(&ut); |
||||
} |
||||
+ |
||||
+// Ticket 12888: bad handling of illegal utf-8 containing many instances of the archaic, now illegal, |
||||
+// six byte utf-8 forms. Original implementation had an assumption that |
||||
+// there would be at most three utf-8 bytes per UTF-16 code unit. |
||||
+// The five and six byte sequences map to a single replacement character. |
||||
+ |
||||
+void UTextTest::Ticket12888() { |
||||
+ const char *badString = |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80" |
||||
+ "\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80\xfd\x80\x80\x80\x80\x80"; |
||||
+ |
||||
+ UErrorCode status = U_ZERO_ERROR; |
||||
+ LocalUTextPointer ut(utext_openUTF8(NULL, badString, -1, &status)); |
||||
+ TEST_SUCCESS(status); |
||||
+ for (;;) { |
||||
+ UChar32 c = utext_next32(ut.getAlias()); |
||||
+ if (c == U_SENTINEL) { |
||||
+ break; |
||||
+ } |
||||
+ } |
||||
+ int32_t endIdx = utext_getNativeIndex(ut.getAlias()); |
||||
+ if (endIdx != (int32_t)strlen(badString)) { |
||||
+ errln("%s:%d expected=%d, actual=%d", __FILE__, __LINE__, strlen(badString), endIdx); |
||||
+ return; |
||||
+ } |
||||
+ |
||||
+ for (int32_t prevIndex = endIdx; prevIndex>0;) { |
||||
+ UChar32 c = utext_previous32(ut.getAlias()); |
||||
+ int32_t currentIndex = utext_getNativeIndex(ut.getAlias()); |
||||
+ if (c != 0xfffd) { |
||||
+ errln("%s:%d (expected, actual, index) = (%d, %d, %d)\n", |
||||
+ __FILE__, __LINE__, 0xfffd, c, currentIndex); |
||||
+ break; |
||||
+ } |
||||
+ if (currentIndex != prevIndex - 6) { |
||||
+ errln("%s:%d: wrong index. Expected, actual = %d, %d", |
||||
+ __FILE__, __LINE__, prevIndex - 6, currentIndex); |
||||
+ break; |
||||
+ } |
||||
+ prevIndex = currentIndex; |
||||
+ } |
||||
+} |
||||
Index: /trunk/icu4c/source/test/intltest/utxttest.h |
||||
=================================================================== |
||||
--- icu.orig/source/test/intltest/utxttest.h |
||||
+++ icu/source/test/intltest/utxttest.h |
||||
@@ -39,4 +39,5 @@ |
||||
void Ticket10983(); |
||||
void Ticket12130(); |
||||
+ void Ticket12888(); |
||||
|
||||
private: |
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
diff -up webkitgtk-2.20.4/Source/WebCore/accessibility/AccessibilityRenderObject.cpp.atk_continuation_crash webkitgtk-2.20.4/Source/WebCore/accessibility/AccessibilityRenderObject.cpp |
||||
--- webkitgtk-2.20.4/Source/WebCore/accessibility/AccessibilityRenderObject.cpp.atk_continuation_crash 2018-02-20 09:25:28.000000000 +0100 |
||||
+++ webkitgtk-2.20.4/Source/WebCore/accessibility/AccessibilityRenderObject.cpp 2018-08-07 11:43:19.438679595 +0200 |
||||
@@ -381,8 +381,9 @@ AccessibilityObject* AccessibilityRender |
||||
|
||||
// Case 5: node has no next sibling, and its parent is an inline with a continuation. |
||||
// Case 5.1: After case 4, (the element was inline w/ continuation but had no sibling), then check it's parent. |
||||
- if (!nextSibling && isInlineWithContinuation(*m_renderer->parent())) { |
||||
- auto& continuation = *downcast<RenderInline>(*m_renderer->parent()).continuation(); |
||||
+ auto parent = m_renderer->parent(); |
||||
+ if (!nextSibling && parent && isInlineWithContinuation(*parent)) { |
||||
+ auto& continuation = *downcast<RenderInline>(*parent).continuation(); |
||||
|
||||
// Case 5a: continuation is a block - in this case the block itself is the next sibling. |
||||
if (is<RenderBlock>(continuation)) |
@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
|
||||
diff -up webkitgtk-2.20.3/Source/WebCore/accessibility/AccessibilityObject.cpp.atk_crash webkitgtk-2.20.3/Source/WebCore/accessibility/AccessibilityObject.cpp |
||||
--- webkitgtk-2.20.3/Source/WebCore/accessibility/AccessibilityObject.cpp.atk_crash 2018-04-09 14:00:57.000000000 +0200 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/accessibility/AccessibilityObject.cpp 2018-07-24 13:40:41.183634369 +0200 |
||||
@@ -67,6 +67,7 @@ |
||||
#include "RenderView.h" |
||||
#include "RenderWidget.h" |
||||
#include "RenderedPosition.h" |
||||
+#include "ScriptDisallowedScope.h" |
||||
#include "Settings.h" |
||||
#include "TextCheckerClient.h" |
||||
#include "TextCheckingHelper.h" |
||||
@@ -1771,7 +1772,11 @@ void AccessibilityObject::updateBackingS |
||||
// Updating the layout may delete this object. |
||||
RefPtr<AccessibilityObject> protectedThis(this); |
||||
if (auto* document = this->document()) { |
||||
- if (!document->view()->layoutContext().isInRenderTreeLayout() && !document->inRenderTreeUpdate() && !document->inStyleRecalc()) |
||||
+ if (!document->view()->layoutContext().isInRenderTreeLayout() |
||||
+ && !document->inRenderTreeUpdate() |
||||
+ && !document->inStyleRecalc() |
||||
+ && ScriptDisallowedScope::InMainThread::isScriptAllowed()) |
||||
+ |
||||
document->updateLayoutIgnorePendingStylesheets(); |
||||
} |
||||
updateChildrenIfNecessary(); |
@ -0,0 +1,30 @@
@@ -0,0 +1,30 @@
|
||||
diff -up webkitgtk-2.14.7/Source/JavaScriptCore/bytecode/CodeBlock.cpp.b132333 webkitgtk-2.14.7/Source/JavaScriptCore/bytecode/CodeBlock.cpp |
||||
--- webkitgtk-2.14.7/Source/JavaScriptCore/bytecode/CodeBlock.cpp.b132333 2017-02-07 09:05:07.000000000 +0100 |
||||
+++ webkitgtk-2.14.7/Source/JavaScriptCore/bytecode/CodeBlock.cpp 2017-06-16 10:34:57.859748036 +0200 |
||||
@@ -2186,7 +2186,12 @@ void CodeBlock::finishCreation(VM& vm, S |
||||
instructions[i + 5].u.watchpointSet = op.watchpointSet; |
||||
else if (op.structure) |
||||
instructions[i + 5].u.structure.set(vm, this, op.structure); |
||||
- instructions[i + 6].u.pointer = reinterpret_cast<void*>(op.operand); |
||||
+ |
||||
+ if (op.type == ClosureVar || op.type == ClosureVarWithVarInjectionChecks || op.type == GlobalProperty || op.type == GlobalPropertyWithVarInjectionChecks || op.type == ModuleVar) |
||||
+ instructions[i + 6].u.operand = op.operand; |
||||
+ else |
||||
+ instructions[i + 6].u.pointer = reinterpret_cast<void*>(op.operand); |
||||
+ |
||||
break; |
||||
} |
||||
|
||||
@@ -2222,7 +2227,11 @@ void CodeBlock::finishCreation(VM& vm, S |
||||
op.watchpointSet->invalidate(vm, PutToScopeFireDetail(this, ident)); |
||||
} else if (op.structure) |
||||
instructions[i + 5].u.structure.set(vm, this, op.structure); |
||||
- instructions[i + 6].u.pointer = reinterpret_cast<void*>(op.operand); |
||||
+ |
||||
+ if (op.type == ClosureVar || op.type == ClosureVarWithVarInjectionChecks || op.type == GlobalProperty || op.type == GlobalPropertyWithVarInjectionChecks || op.type == ModuleVar) |
||||
+ instructions[i + 6].u.operand = op.operand; |
||||
+ else |
||||
+ instructions[i + 6].u.pointer = reinterpret_cast<void*>(op.operand); |
||||
|
||||
break; |
||||
} |
@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
|
||||
diff --git a/Source/WebCore/rendering/RenderThemeGtk.cpp b/Source/WebCore/rendering/RenderThemeGtk.cpp |
||||
index d04a6845f26..8e8fe10f58e 100644 |
||||
--- a/Source/WebCore/rendering/RenderThemeGtk.cpp |
||||
+++ b/Source/WebCore/rendering/RenderThemeGtk.cpp |
||||
@@ -1314,7 +1314,7 @@ void RenderThemeGtk::adjustSliderThumbSize(RenderStyle& style, const Element*) c |
||||
if (part != SliderThumbHorizontalPart && part != SliderThumbVerticalPart) |
||||
return; |
||||
|
||||
- auto& sliderWidget = static_cast<RenderThemeSlider&>(RenderThemeWidget::getOrCreate(part == SliderHorizontalPart ? RenderThemeWidget::Type::HorizontalSlider : RenderThemeWidget::Type::VerticalSlider)); |
||||
+ auto& sliderWidget = static_cast<RenderThemeSlider&>(RenderThemeWidget::getOrCreate(part == SliderThumbHorizontalPart ? RenderThemeWidget::Type::HorizontalSlider : RenderThemeWidget::Type::VerticalSlider)); |
||||
sliderWidget.scale().setState(GTK_STATE_FLAG_NORMAL); |
||||
sliderWidget.trough().setState(GTK_STATE_FLAG_NORMAL); |
||||
|
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
diff --git a/Source/WebCore/page/linux/ResourceUsageThreadLinux.cpp b/Source/WebCore/page/linux/ResourceUsageThreadLinux.cpp |
||||
index d9e4179072d..b1f51e14f6f 100644 |
||||
--- a/Source/WebCore/page/linux/ResourceUsageThreadLinux.cpp |
||||
+++ b/Source/WebCore/page/linux/ResourceUsageThreadLinux.cpp |
||||
@@ -58,8 +58,14 @@ static float cpuPeriod() |
||||
unsigned long long userTime, niceTime, systemTime, idleTime; |
||||
unsigned long long ioWait, irq, softIrq, steal, guest, guestnice; |
||||
ioWait = irq = softIrq = steal = guest = guestnice = 0; |
||||
- sscanf(buffer, "cpu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu", |
||||
+ int retVal = sscanf(buffer, "cpu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu", |
||||
&userTime, &niceTime, &systemTime, &idleTime, &ioWait, &irq, &softIrq, &steal, &guest, &guestnice); |
||||
+ // We expect 10 values to be matched by sscanf |
||||
+ if (retVal < 10 || retVal == EOF) { |
||||
+ fclose(file); |
||||
+ return 0; |
||||
+ } |
||||
+ |
||||
|
||||
// Keep parsing if we still don't know cpuCount. |
||||
static unsigned cpuCount = 0; |
@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
|
||||
diff --git a/Source/WebCore/page/linux/ResourceUsageThreadLinux.cpp b/Source/WebCore/page/linux/ResourceUsageThreadLinux.cpp |
||||
index b1f51e14f6f..70f0d69c11b 100644 |
||||
--- a/Source/WebCore/page/linux/ResourceUsageThreadLinux.cpp |
||||
+++ b/Source/WebCore/page/linux/ResourceUsageThreadLinux.cpp |
||||
@@ -61,7 +61,7 @@ static float cpuPeriod() |
||||
int retVal = sscanf(buffer, "cpu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu", |
||||
&userTime, &niceTime, &systemTime, &idleTime, &ioWait, &irq, &softIrq, &steal, &guest, &guestnice); |
||||
// We expect 10 values to be matched by sscanf |
||||
- if (retVal < 10 || retVal == EOF) { |
||||
+ if (retVal != 10) { |
||||
fclose(file); |
||||
return 0; |
||||
} |
@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
|
||||
diff -up webkitgtk-2.20.3/Source/JavaScriptCore/runtime/JSString.h.covscan_fixes webkitgtk-2.20.3/Source/JavaScriptCore/runtime/JSString.h |
||||
--- webkitgtk-2.20.3/Source/JavaScriptCore/runtime/JSString.h.covscan_fixes 2018-06-13 15:02:38.085399191 +0200 |
||||
+++ webkitgtk-2.20.3/Source/JavaScriptCore/runtime/JSString.h 2018-06-13 15:02:45.140375189 +0200 |
||||
@@ -221,7 +221,7 @@ private: |
||||
mutable unsigned m_flags; |
||||
|
||||
// A string is represented either by a String or a rope of fibers. |
||||
- unsigned m_length; |
||||
+ unsigned m_length{0}; |
||||
mutable String m_value; |
||||
|
||||
friend class LLIntOffsetsExtractor; |
||||
diff -up webkitgtk-2.20.3/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp.covscan_fixes webkitgtk-2.20.3/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp |
||||
--- webkitgtk-2.20.3/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp.covscan_fixes 2018-06-11 10:16:31.000000000 +0200 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp 2018-06-13 16:14:56.188378149 +0200 |
||||
@@ -230,7 +230,7 @@ private: |
||||
GstVideoFrame m_videoFrame; |
||||
IntSize m_size; |
||||
TextureMapperGL::Flags m_flags; |
||||
- GLuint m_textureID; |
||||
+ GLuint m_textureID { 0 }; |
||||
bool m_isValid { false }; |
||||
}; |
||||
#endif // USE(GSTREAMER_GL) |
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
--- a/Source/bmalloc/bmalloc/DebugHeap.h |
||||
+++ a/Source/bmalloc/bmalloc/DebugHeap.h |
||||
@@ -53,7 +53,7 @@ private: |
||||
#endif |
||||
|
||||
// This is the debug heap. We can use whatever data structures we like. It doesn't matter. |
||||
- size_t m_pageSize; |
||||
+ size_t m_pageSize { 0 }; |
||||
std::mutex m_lock; |
||||
std::unordered_map<void*, size_t> m_sizeMap; |
||||
}; |
||||
--- a/Source/bmalloc/bmalloc/IsoTLS.cpp |
||||
+++ a/Source/bmalloc/bmalloc/IsoTLS.cpp |
||||
@@ -68,7 +68,9 @@ IsoTLS* IsoTLS::ensureEntries(unsigned offset) |
||||
#if HAVE_PTHREAD_MACHDEP_H |
||||
pthread_key_init_np(tlsKey, destructor); |
||||
#else |
||||
- pthread_key_create(&s_tlsKey, destructor); |
||||
+ int error = pthread_key_create(&s_tlsKey, destructor); |
||||
+ if (error) |
||||
+ BCRASH(); |
||||
s_didInitialize = true; |
||||
#endif |
||||
}); |
||||
--- a/Source/bmalloc/bmalloc/VMAllocate.h |
||||
+++ a/Source/bmalloc/bmalloc/VMAllocate.h |
||||
@@ -56,8 +56,12 @@ namespace bmalloc { |
||||
inline size_t vmPageSize() |
||||
{ |
||||
static size_t cached; |
||||
- if (!cached) |
||||
- cached = sysconf(_SC_PAGESIZE); |
||||
+ if (!cached) { |
||||
+ long pageSize = sysconf(_SC_PAGESIZE); |
||||
+ if (pageSize < 0) |
||||
+ BCRASH(); |
||||
+ cached = pageSize; |
||||
+ } |
||||
return cached; |
||||
} |
||||
|
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
diff -up webkitgtk-2.20.3/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp.covscan_gstreamer webkitgtk-2.20.3/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp |
||||
--- webkitgtk-2.20.3/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp.covscan_gstreamer 2018-06-27 10:21:44.715668445 +0200 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp 2018-06-27 10:22:48.513607713 +0200 |
||||
@@ -227,9 +227,9 @@ public: |
||||
bool isValid() const { return m_isValid; } |
||||
|
||||
private: |
||||
- GstVideoFrame m_videoFrame; |
||||
+ GstVideoFrame m_videoFrame { }; |
||||
IntSize m_size; |
||||
- TextureMapperGL::Flags m_flags; |
||||
+ TextureMapperGL::Flags m_flags { }; |
||||
GLuint m_textureID { 0 }; |
||||
bool m_isValid { false }; |
||||
}; |
||||
diff -up webkitgtk-2.20.3/Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h.covscan_gstreamer webkitgtk-2.20.3/Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h |
||||
--- webkitgtk-2.20.3/Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h.covscan_gstreamer 2018-02-19 08:45:32.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h 2018-06-27 10:21:44.715668445 +0200 |
||||
@@ -85,7 +85,7 @@ private: |
||||
MediaSourceGStreamer* m_mediaSource; |
||||
ContentType m_type; |
||||
Ref<MediaSourceClientGStreamerMSE> m_client; |
||||
- SourceBufferPrivateClient* m_sourceBufferPrivateClient; |
||||
+ SourceBufferPrivateClient* m_sourceBufferPrivateClient { nullptr }; |
||||
bool m_isReadyForMoreSamples = true; |
||||
bool m_notifyWhenReadyForMoreSamples = false; |
||||
AtomicString m_trackId; |
||||
diff -up webkitgtk-2.20.3/Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp.covscan_gstreamer webkitgtk-2.20.3/Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp |
||||
--- webkitgtk-2.20.3/Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp.covscan_gstreamer 2018-02-19 08:45:32.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp 2018-06-27 10:21:44.715668445 +0200 |
||||
@@ -135,7 +135,7 @@ struct _WebKitVideoSinkPrivate { |
||||
|
||||
VideoRenderRequestScheduler scheduler; |
||||
GstVideoInfo info; |
||||
- GstCaps* currentCaps; |
||||
+ GstCaps* currentCaps { nullptr }; |
||||
}; |
||||
|
||||
#define webkit_video_sink_parent_class parent_class |
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
diff -up webkitgtk-2.20.3/Source/JavaScriptCore/runtime/CodeCache.cpp.covscan_uninit webkitgtk-2.20.3/Source/JavaScriptCore/runtime/CodeCache.cpp |
||||
--- webkitgtk-2.20.3/Source/JavaScriptCore/runtime/CodeCache.cpp.covscan_uninit 2018-06-18 10:03:23.060605715 +0200 |
||||
+++ webkitgtk-2.20.3/Source/JavaScriptCore/runtime/CodeCache.cpp 2018-06-18 10:03:44.223529644 +0200 |
||||
@@ -129,7 +129,7 @@ UnlinkedFunctionExecutable* CodeCache::g |
||||
// This function assumes an input string that would result in a single function declaration. |
||||
StatementNode* statement = program->singleStatement(); |
||||
if (UNLIKELY(!statement)) { |
||||
- JSToken token; |
||||
+ JSToken token = { }; |
||||
error = ParserError(ParserError::SyntaxError, ParserError::SyntaxErrorIrrecoverable, token, "Parser error", -1); |
||||
return nullptr; |
||||
} |
||||
@@ -137,7 +137,7 @@ UnlinkedFunctionExecutable* CodeCache::g |
||||
|
||||
StatementNode* funcDecl = static_cast<BlockNode*>(statement)->singleStatement(); |
||||
if (UNLIKELY(!funcDecl)) { |
||||
- JSToken token; |
||||
+ JSToken token = { }; |
||||
error = ParserError(ParserError::SyntaxError, ParserError::SyntaxErrorIrrecoverable, token, "Parser error", -1); |
||||
return nullptr; |
||||
} |
@ -0,0 +1,505 @@
@@ -0,0 +1,505 @@
|
||||
diff -up webkitgtk-2.20.3/Source/JavaScriptCore/b3/air/AirAllocateRegistersByGraphColoring.cpp.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/JavaScriptCore/b3/air/AirAllocateRegistersByGraphColoring.cpp |
||||
--- webkitgtk-2.20.3/Source/JavaScriptCore/b3/air/AirAllocateRegistersByGraphColoring.cpp.covscan_fixes_uninit_ctor 2018-02-19 08:45:14.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/JavaScriptCore/b3/air/AirAllocateRegistersByGraphColoring.cpp 2018-06-18 09:07:12.032744813 +0200 |
||||
@@ -876,7 +876,7 @@ protected: |
||||
} |
||||
|
||||
private: |
||||
- unsigned m_positionInMoveList; |
||||
+ unsigned m_positionInMoveList { 0 }; |
||||
Vector<unsigned, 0, UnsafeVectorOverflow> m_moveList; |
||||
Vector<unsigned, 0, UnsafeVectorOverflow> m_lowPriorityMoveList; |
||||
}; |
||||
diff -up webkitgtk-2.20.3/Source/JavaScriptCore/bytecode/PolymorphicAccess.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/JavaScriptCore/bytecode/PolymorphicAccess.h |
||||
--- webkitgtk-2.20.3/Source/JavaScriptCore/bytecode/PolymorphicAccess.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:14.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/JavaScriptCore/bytecode/PolymorphicAccess.h 2018-06-18 09:07:12.034744805 +0200 |
||||
@@ -122,7 +122,7 @@ public: |
||||
} |
||||
|
||||
private: |
||||
- Kind m_kind; |
||||
+ Kind m_kind { MadeNoChanges }; |
||||
MacroAssemblerCodePtr m_code; |
||||
Vector<std::pair<InlineWatchpointSet&, StringFireDetail>> m_watchpointsToFire; |
||||
}; |
||||
diff -up webkitgtk-2.20.3/Source/JavaScriptCore/dfg/DFGOSRExit.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/JavaScriptCore/dfg/DFGOSRExit.h |
||||
--- webkitgtk-2.20.3/Source/JavaScriptCore/dfg/DFGOSRExit.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:14.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/JavaScriptCore/dfg/DFGOSRExit.h 2018-06-18 09:07:12.034744805 +0200 |
||||
@@ -131,7 +131,7 @@ struct OSRExitState : RefCounted<OSRExit |
||||
void* jumpTarget; |
||||
ArrayProfile* arrayProfile; |
||||
|
||||
- ExtraInitializationLevel extraInitializationLevel; |
||||
+ ExtraInitializationLevel extraInitializationLevel { }; |
||||
Profiler::OSRExit* profilerExit { nullptr }; |
||||
}; |
||||
|
||||
diff -up webkitgtk-2.20.3/Source/JavaScriptCore/runtime/ConfigFile.cpp.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/JavaScriptCore/runtime/ConfigFile.cpp |
||||
--- webkitgtk-2.20.3/Source/JavaScriptCore/runtime/ConfigFile.cpp.covscan_fixes_uninit_ctor 2018-06-11 10:16:31.000000000 +0200 |
||||
+++ webkitgtk-2.20.3/Source/JavaScriptCore/runtime/ConfigFile.cpp 2018-06-18 09:07:12.035744801 +0200 |
||||
@@ -233,7 +233,7 @@ private: |
||||
|
||||
const char* m_filename; |
||||
unsigned m_lineNumber; |
||||
- FILE* m_file; |
||||
+ FILE* m_file { nullptr }; |
||||
char m_buffer[BUFSIZ]; |
||||
char* m_srcPtr; |
||||
char* m_bufferEnd; |
||||
diff -up webkitgtk-2.20.3/Source/JavaScriptCore/runtime/JSBigInt.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/JavaScriptCore/runtime/JSBigInt.h |
||||
--- webkitgtk-2.20.3/Source/JavaScriptCore/runtime/JSBigInt.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:17.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/JavaScriptCore/runtime/JSBigInt.h 2018-06-18 09:07:12.035744801 +0200 |
||||
@@ -84,7 +84,7 @@ public: |
||||
double toNumber(ExecState*) const; |
||||
|
||||
JSObject* toObject(ExecState*, JSGlobalObject*) const; |
||||
- |
||||
+ |
||||
private: |
||||
using Digit = uintptr_t; |
||||
static constexpr const int bitsPerByte = 8; |
||||
@@ -92,15 +92,15 @@ private: |
||||
static constexpr const int halfDigitBits = digitBits / 2; |
||||
static constexpr const Digit halfDigitMask = (1ull << halfDigitBits) - 1; |
||||
static constexpr const int maxInt = 0x7FFFFFFF; |
||||
- |
||||
+ |
||||
// The maximum length that the current implementation supports would be |
||||
// maxInt / digitBits. However, we use a lower limit for now, because |
||||
// raising it later is easier than lowering it. |
||||
// Support up to 1 million bits. |
||||
static const int maxLength = 1024 * 1024 / (sizeof(void*) * bitsPerByte); |
||||
- |
||||
+ |
||||
static uint64_t calculateMaximumCharactersRequired(int length, int radix, Digit lastDigit, bool sign); |
||||
- |
||||
+ |
||||
static void absoluteDivSmall(ExecState&, JSBigInt* x, Digit divisor, JSBigInt** quotient, Digit& remainder); |
||||
static void internalMultiplyAdd(JSBigInt* source, Digit factor, Digit summand, int, JSBigInt* result); |
||||
|
||||
@@ -126,15 +126,15 @@ private: |
||||
JSBigInt* rightTrim(VM&); |
||||
|
||||
void inplaceMultiplyAdd(Digit multiplier, Digit part); |
||||
- |
||||
+ |
||||
static size_t offsetOfData(); |
||||
Digit* dataStorage(); |
||||
|
||||
Digit digit(int); |
||||
void setDigit(int, Digit); |
||||
- |
||||
- int m_length; |
||||
- bool m_sign; |
||||
+ |
||||
+ int m_length { 0 }; |
||||
+ bool m_sign { false }; |
||||
}; |
||||
|
||||
inline JSBigInt* asBigInt(JSValue value) |
||||
diff -up webkitgtk-2.20.3/Source/JavaScriptCore/runtime/PropertySlot.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/JavaScriptCore/runtime/PropertySlot.h |
||||
--- webkitgtk-2.20.3/Source/JavaScriptCore/runtime/PropertySlot.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:17.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/JavaScriptCore/runtime/PropertySlot.h 2018-06-18 09:07:12.035744801 +0200 |
||||
@@ -368,7 +368,7 @@ private: |
||||
JS_EXPORT_PRIVATE JSValue customGetter(ExecState*, PropertyName) const; |
||||
JS_EXPORT_PRIVATE JSValue customAccessorGetter(ExecState*, PropertyName) const; |
||||
|
||||
- unsigned m_attributes; |
||||
+ unsigned m_attributes { 0 }; |
||||
union { |
||||
EncodedJSValue value; |
||||
struct { |
||||
diff -up webkitgtk-2.20.3/Source/JavaScriptCore/wasm/js/WasmToJS.cpp.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/JavaScriptCore/wasm/js/WasmToJS.cpp |
||||
--- webkitgtk-2.20.3/Source/JavaScriptCore/wasm/js/WasmToJS.cpp.covscan_fixes_uninit_ctor 2018-03-05 12:42:39.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/JavaScriptCore/wasm/js/WasmToJS.cpp 2018-06-18 09:07:12.035744801 +0200 |
||||
@@ -264,7 +264,7 @@ Expected<MacroAssemblerCodeRef, BindingF |
||||
JSValue result = call(exec, callee, callType, callData, jsUndefined(), args); |
||||
RETURN_IF_EXCEPTION(throwScope, 0); |
||||
|
||||
- uint64_t realResult; |
||||
+ uint64_t realResult = 0; |
||||
switch (signature.returnType()) { |
||||
case Func: |
||||
case Anyfunc: |
||||
diff -up webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp |
||||
--- webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp.covscan_fixes_uninit_ctor 2018-03-05 11:37:06.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp 2018-06-18 09:07:12.036744797 +0200 |
||||
@@ -147,10 +147,10 @@ public: |
||||
|
||||
private: |
||||
friend class B3IRGenerator; |
||||
- BlockType blockType; |
||||
- BasicBlock* continuation; |
||||
- BasicBlock* special; |
||||
- ResultList result; |
||||
+ BlockType blockType { }; |
||||
+ BasicBlock* continuation { nullptr }; |
||||
+ BasicBlock* special { nullptr }; |
||||
+ ResultList result { }; |
||||
}; |
||||
|
||||
typedef Value* ExpressionType; |
||||
diff -up webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmFormat.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmFormat.h |
||||
--- webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmFormat.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:17.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmFormat.h 2018-06-18 09:07:12.036744797 +0200 |
||||
@@ -226,7 +226,7 @@ public: |
||||
std::optional<uint32_t> maximum() const { return m_maximum; } |
||||
|
||||
private: |
||||
- uint32_t m_initial; |
||||
+ uint32_t m_initial { 0 }; |
||||
std::optional<uint32_t> m_maximum; |
||||
bool m_isImport { false }; |
||||
bool m_isValid { false }; |
||||
diff -up webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmFunctionParser.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmFunctionParser.h |
||||
--- webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmFunctionParser.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:17.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmFunctionParser.h 2018-06-18 09:07:12.036744797 +0200 |
||||
@@ -87,7 +87,7 @@ private: |
||||
const Signature& m_signature; |
||||
const ModuleInformation& m_info; |
||||
|
||||
- OpType m_currentOpcode; |
||||
+ OpType m_currentOpcode { }; |
||||
size_t m_currentOpcodeStartingOffset { 0 }; |
||||
|
||||
unsigned m_unreachableBlocks { 0 }; |
||||
diff -up webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmTierUpCount.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmTierUpCount.h |
||||
--- webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmTierUpCount.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:17.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmTierUpCount.h 2018-06-18 09:07:12.037744793 +0200 |
||||
@@ -65,7 +65,7 @@ public: |
||||
|
||||
private: |
||||
uint32_t m_count; |
||||
- Atomic<bool> m_tierUpStarted; |
||||
+ Atomic<bool> m_tierUpStarted { false }; |
||||
}; |
||||
|
||||
} } // namespace JSC::Wasm |
||||
diff -up webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmValidate.cpp.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmValidate.cpp |
||||
--- webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmValidate.cpp.covscan_fixes_uninit_ctor 2018-02-19 08:45:17.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/JavaScriptCore/wasm/WasmValidate.cpp 2018-06-18 09:07:12.037744793 +0200 |
||||
@@ -72,8 +72,8 @@ public: |
||||
Type signature() const { return m_signature; } |
||||
Type branchTargetSignature() const { return type() == BlockType::Loop ? Void : signature(); } |
||||
private: |
||||
- BlockType m_blockType; |
||||
- Type m_signature; |
||||
+ BlockType m_blockType { }; |
||||
+ Type m_signature { }; |
||||
}; |
||||
typedef String ErrorType; |
||||
typedef Unexpected<ErrorType> UnexpectedResult; |
||||
diff -up webkitgtk-2.20.3/Source/JavaScriptCore/yarr/YarrJIT.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/JavaScriptCore/yarr/YarrJIT.h |
||||
--- webkitgtk-2.20.3/Source/JavaScriptCore/yarr/YarrJIT.h.covscan_fixes_uninit_ctor 2018-02-20 10:12:50.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/JavaScriptCore/yarr/YarrJIT.h 2018-06-18 09:07:12.037744793 +0200 |
||||
@@ -201,7 +201,7 @@ private: |
||||
MacroAssemblerCodeRef m_matchOnly8; |
||||
MacroAssemblerCodeRef m_matchOnly16; |
||||
#if ENABLE(YARR_JIT_ALL_PARENS_EXPRESSIONS) |
||||
- bool m_usesPatternContextBuffer; |
||||
+ bool m_usesPatternContextBuffer { false }; |
||||
#endif |
||||
std::optional<JITFailureReason> m_failureReason; |
||||
}; |
||||
diff -up webkitgtk-2.20.3/Source/WebCore/accessibility/AccessibilityTableColumn.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/WebCore/accessibility/AccessibilityTableColumn.h |
||||
--- webkitgtk-2.20.3/Source/WebCore/accessibility/AccessibilityTableColumn.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:31.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/accessibility/AccessibilityTableColumn.h 2018-06-18 09:07:12.037744793 +0200 |
||||
@@ -33,36 +33,36 @@ |
||||
#include "IntRect.h" |
||||
|
||||
namespace WebCore { |
||||
- |
||||
+ |
||||
class RenderTableSection; |
||||
|
||||
class AccessibilityTableColumn final : public AccessibilityMockObject { |
||||
public: |
||||
static Ref<AccessibilityTableColumn> create(); |
||||
virtual ~AccessibilityTableColumn(); |
||||
- |
||||
+ |
||||
AccessibilityObject* headerObject(); |
||||
- |
||||
+ |
||||
AccessibilityRole roleValue() const override { return AccessibilityRole::Column; } |
||||
- |
||||
+ |
||||
void setColumnIndex(int columnIndex) { m_columnIndex = columnIndex; } |
||||
- int columnIndex() const { return m_columnIndex; } |
||||
- |
||||
+ int columnIndex() const { return m_columnIndex; } |
||||
+ |
||||
void addChildren() override; |
||||
void setParent(AccessibilityObject*) override; |
||||
- |
||||
+ |
||||
LayoutRect elementRect() const override; |
||||
- |
||||
+ |
||||
private: |
||||
AccessibilityTableColumn(); |
||||
- |
||||
+ |
||||
AccessibilityObject* headerObjectForSection(RenderTableSection*, bool thTagRequired); |
||||
bool computeAccessibilityIsIgnored() const override; |
||||
bool isTableColumn() const override { return true; } |
||||
|
||||
- unsigned m_columnIndex; |
||||
+ unsigned m_columnIndex { 0 }; |
||||
}; |
||||
|
||||
-} // namespace WebCore |
||||
+} // namespace WebCore |
||||
|
||||
SPECIALIZE_TYPE_TRAITS_ACCESSIBILITY(AccessibilityTableColumn, isTableColumn()) |
||||
diff -up webkitgtk-2.20.3/Source/WebCore/dom/RequestAnimationFrameCallback.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/WebCore/dom/RequestAnimationFrameCallback.h |
||||
--- webkitgtk-2.20.3/Source/WebCore/dom/RequestAnimationFrameCallback.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:32.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/dom/RequestAnimationFrameCallback.h 2018-06-18 09:07:12.037744793 +0200 |
||||
@@ -42,9 +42,9 @@ public: |
||||
|
||||
virtual CallbackResult<void> handleEvent(double highResTimeMs) = 0; |
||||
|
||||
- int m_id; |
||||
- bool m_firedOrCancelled; |
||||
- bool m_useLegacyTimeBase; |
||||
+ int m_id { 0 }; |
||||
+ bool m_firedOrCancelled { false }; |
||||
+ bool m_useLegacyTimeBase { false }; |
||||
}; |
||||
|
||||
} // namespace WebCore |
||||
diff -up webkitgtk-2.20.3/Source/WebCore/html/HTMLMediaElement.cpp.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/WebCore/html/HTMLMediaElement.cpp |
||||
--- webkitgtk-2.20.3/Source/WebCore/html/HTMLMediaElement.cpp.covscan_fixes_uninit_ctor 2018-02-19 12:04:38.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/html/HTMLMediaElement.cpp 2018-06-18 09:07:12.039744785 +0200 |
||||
@@ -2105,9 +2105,10 @@ bool HTMLMediaElement::isSafeToLoadURL(c |
||||
|
||||
RefPtr<Frame> frame = document().frame(); |
||||
if (!frame || !document().securityOrigin().canDisplay(url)) { |
||||
- if (actionIfInvalid == Complain) |
||||
+ if (actionIfInvalid == Complain) { |
||||
FrameLoader::reportLocalLoadFailed(frame.get(), url.stringCenterEllipsizedToLength()); |
||||
ERROR_LOG(LOGIDENTIFIER, url , " was rejected by SecurityOrigin"); |
||||
+ } |
||||
return false; |
||||
} |
||||
|
||||
diff -up webkitgtk-2.20.3/Source/WebCore/html/HTMLMenuElement.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/WebCore/html/HTMLMenuElement.h |
||||
--- webkitgtk-2.20.3/Source/WebCore/html/HTMLMenuElement.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:32.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/html/HTMLMenuElement.h 2018-06-18 09:07:12.039744785 +0200 |
||||
@@ -39,7 +39,7 @@ private: |
||||
void removedFromAncestor(RemovalType, ContainerNode&) final; |
||||
void parseAttribute(const QualifiedName&, const AtomicString&) final; |
||||
|
||||
- bool m_isTouchBarMenu; |
||||
+ bool m_isTouchBarMenu { false }; |
||||
}; |
||||
|
||||
} // namespace WebCore |
||||
diff -up webkitgtk-2.20.3/Source/WebCore/Modules/webaudio/AudioProcessingEvent.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/WebCore/Modules/webaudio/AudioProcessingEvent.h |
||||
--- webkitgtk-2.20.3/Source/WebCore/Modules/webaudio/AudioProcessingEvent.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:31.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/Modules/webaudio/AudioProcessingEvent.h 2018-06-18 09:07:12.040744781 +0200 |
||||
@@ -58,7 +58,7 @@ private: |
||||
|
||||
RefPtr<AudioBuffer> m_inputBuffer; |
||||
RefPtr<AudioBuffer> m_outputBuffer; |
||||
- double m_playbackTime; |
||||
+ double m_playbackTime { 0.0 }; |
||||
}; |
||||
|
||||
} // namespace WebCore |
||||
diff -up webkitgtk-2.20.3/Source/WebCore/Modules/webaudio/DelayDSPKernel.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/WebCore/Modules/webaudio/DelayDSPKernel.h |
||||
--- webkitgtk-2.20.3/Source/WebCore/Modules/webaudio/DelayDSPKernel.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:31.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/Modules/webaudio/DelayDSPKernel.h 2018-06-18 09:07:12.040744781 +0200 |
||||
@@ -31,17 +31,17 @@ |
||||
namespace WebCore { |
||||
|
||||
class DelayProcessor; |
||||
- |
||||
+ |
||||
class DelayDSPKernel : public AudioDSPKernel { |
||||
-public: |
||||
+public: |
||||
explicit DelayDSPKernel(DelayProcessor*); |
||||
DelayDSPKernel(double maxDelayTime, float sampleRate); |
||||
- |
||||
+ |
||||
void process(const float* source, float* destination, size_t framesToProcess) override; |
||||
void reset() override; |
||||
- |
||||
+ |
||||
double maxDelayTime() const { return m_maxDelayTime; } |
||||
- |
||||
+ |
||||
void setDelayFrames(double numberOfFrames) { m_desiredDelayFrames = numberOfFrames; } |
||||
|
||||
double tailTime() const override; |
||||
@@ -49,12 +49,12 @@ public: |
||||
|
||||
private: |
||||
AudioFloatArray m_buffer; |
||||
- double m_maxDelayTime; |
||||
+ double m_maxDelayTime { 0.0 }; |
||||
int m_writeIndex; |
||||
- double m_currentDelayTime; |
||||
- double m_smoothingRate; |
||||
+ double m_currentDelayTime { 0.0 }; |
||||
+ double m_smoothingRate { 0.0 }; |
||||
bool m_firstTime; |
||||
- double m_desiredDelayFrames; |
||||
+ double m_desiredDelayFrames { 0.0 }; |
||||
|
||||
AudioFloatArray m_delayTimes; |
||||
|
||||
diff -up webkitgtk-2.20.3/Source/WebCore/platform/graphics/ANGLEWebKitBridge.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/WebCore/platform/graphics/ANGLEWebKitBridge.h |
||||
--- webkitgtk-2.20.3/Source/WebCore/platform/graphics/ANGLEWebKitBridge.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:32.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/platform/graphics/ANGLEWebKitBridge.h 2018-06-18 09:07:12.040744781 +0200 |
||||
@@ -85,7 +85,7 @@ private: |
||||
ShShaderOutput m_shaderOutput; |
||||
ShShaderSpec m_shaderSpec; |
||||
|
||||
- ShBuiltInResources m_resources; |
||||
+ ShBuiltInResources m_resources { }; |
||||
}; |
||||
|
||||
} // namespace WebCore |
||||
diff -up webkitgtk-2.20.3/Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h |
||||
--- webkitgtk-2.20.3/Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:32.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h 2018-06-18 09:07:12.040744781 +0200 |
||||
@@ -72,7 +72,7 @@ private: |
||||
|
||||
GLuint m_textureID; |
||||
IntSize m_size; |
||||
- GLint m_internalFormat; |
||||
+ GLint m_internalFormat { 0 }; |
||||
TextureMapperGL::Flags m_extraFlags; |
||||
bool m_hasManagedTexture; |
||||
std::unique_ptr<UnmanagedBufferDataHolder> m_unmanagedBufferDataHolder; |
||||
diff -up webkitgtk-2.20.3/Source/WebCore/platform/gtk/ScrollbarThemeGtk.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/WebCore/platform/gtk/ScrollbarThemeGtk.h |
||||
--- webkitgtk-2.20.3/Source/WebCore/platform/gtk/ScrollbarThemeGtk.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:32.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/platform/gtk/ScrollbarThemeGtk.h 2018-06-18 09:07:12.041744777 +0200 |
||||
@@ -61,10 +61,10 @@ public: |
||||
private: |
||||
void updateThemeProperties(); |
||||
|
||||
- bool m_hasForwardButtonStartPart : 1; |
||||
- bool m_hasForwardButtonEndPart : 1; |
||||
- bool m_hasBackButtonStartPart : 1; |
||||
- bool m_hasBackButtonEndPart : 1; |
||||
+ bool m_hasForwardButtonStartPart { true }; |
||||
+ bool m_hasForwardButtonEndPart { true }; |
||||
+ bool m_hasBackButtonStartPart { true }; |
||||
+ bool m_hasBackButtonEndPart { true }; |
||||
bool m_usesOverlayScrollbars { false }; |
||||
#endif // GTK_API_VERSION_2 |
||||
}; |
||||
diff -up webkitgtk-2.20.3/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp |
||||
--- webkitgtk-2.20.3/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp.covscan_fixes_uninit_ctor 2018-02-19 08:45:32.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp 2018-06-18 09:07:12.042744773 +0200 |
||||
@@ -454,10 +454,10 @@ private: |
||||
JPEGImageDecoder* m_decoder; |
||||
unsigned m_bufferLength; |
||||
int m_bytesToSkip; |
||||
- bool m_decodingSizeOnly; |
||||
+ bool m_decodingSizeOnly { false }; |
||||
|
||||
jpeg_decompress_struct m_info; |
||||
- decoder_error_mgr m_err; |
||||
+ decoder_error_mgr m_err { }; |
||||
jstate m_state; |
||||
|
||||
JSAMPARRAY m_samples; |
||||
diff -up webkitgtk-2.20.3/Source/WebCore/platform/text/TextCodecUTF16.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/WebCore/platform/text/TextCodecUTF16.h |
||||
--- webkitgtk-2.20.3/Source/WebCore/platform/text/TextCodecUTF16.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:32.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/platform/text/TextCodecUTF16.h 2018-06-18 09:07:12.042744773 +0200 |
||||
@@ -42,7 +42,7 @@ private: |
||||
|
||||
bool m_littleEndian; |
||||
bool m_haveBufferedByte { false }; |
||||
- unsigned char m_bufferedByte; |
||||
+ unsigned char m_bufferedByte { 0 }; |
||||
}; |
||||
|
||||
} // namespace WebCore |
||||
diff -up webkitgtk-2.20.3/Source/WebCore/platform/URL.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/WebCore/platform/URL.h |
||||
--- webkitgtk-2.20.3/Source/WebCore/platform/URL.h.covscan_fixes_uninit_ctor 2018-04-09 13:02:14.000000000 +0200 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/platform/URL.h 2018-06-18 09:07:12.043744769 +0200 |
||||
@@ -218,19 +218,19 @@ private: |
||||
bool hasPath() const; |
||||
|
||||
String m_string; |
||||
- bool m_isValid : 1; |
||||
- bool m_protocolIsInHTTPFamily : 1; |
||||
- bool m_cannotBeABaseURL : 1; |
||||
+ bool m_isValid { true }; |
||||
+ bool m_protocolIsInHTTPFamily { true }; |
||||
+ bool m_cannotBeABaseURL { true }; |
||||
|
||||
- unsigned m_schemeEnd; |
||||
- unsigned m_userStart; |
||||
- unsigned m_userEnd; |
||||
- unsigned m_passwordEnd; |
||||
- unsigned m_hostEnd; |
||||
- unsigned m_portEnd; |
||||
- unsigned m_pathAfterLastSlash; |
||||
- unsigned m_pathEnd; |
||||
- unsigned m_queryEnd; |
||||
+ unsigned m_schemeEnd { 0 }; |
||||
+ unsigned m_userStart { 0 }; |
||||
+ unsigned m_userEnd { 0 }; |
||||
+ unsigned m_passwordEnd { 0 }; |
||||
+ unsigned m_hostEnd { 0 }; |
||||
+ unsigned m_portEnd { 0 }; |
||||
+ unsigned m_pathAfterLastSlash { 0 }; |
||||
+ unsigned m_pathEnd { 0 }; |
||||
+ unsigned m_queryEnd { 0 }; |
||||
}; |
||||
|
||||
template <class Encoder> |
||||
diff -up webkitgtk-2.20.3/Source/WebCore/rendering/RenderFragmentedFlow.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/WebCore/rendering/RenderFragmentedFlow.h |
||||
--- webkitgtk-2.20.3/Source/WebCore/rendering/RenderFragmentedFlow.h.covscan_fixes_uninit_ctor 2018-02-26 17:00:31.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebCore/rendering/RenderFragmentedFlow.h 2018-06-18 09:07:12.043744769 +0200 |
||||
@@ -231,7 +231,7 @@ protected: |
||||
private: |
||||
WeakPtr<RenderFragmentContainer> m_startFragment; |
||||
WeakPtr<RenderFragmentContainer> m_endFragment; |
||||
- bool m_rangeInvalidated; |
||||
+ bool m_rangeInvalidated { false }; |
||||
}; |
||||
|
||||
typedef PODInterval<LayoutUnit, RenderFragmentContainer*> FragmentInterval; |
||||
diff -up webkitgtk-2.20.3/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h |
||||
--- webkitgtk-2.20.3/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:32.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h 2018-06-18 09:07:12.043744769 +0200 |
||||
@@ -58,7 +58,7 @@ struct NetworkProcessCreationParameters |
||||
bool canHandleHTTPSServerTrustEvaluation { true }; |
||||
|
||||
String cacheStorageDirectory; |
||||
- uint64_t cacheStoragePerOriginQuota; |
||||
+ uint64_t cacheStoragePerOriginQuota { 0 }; |
||||
SandboxExtension::Handle cacheStorageDirectoryExtensionHandle; |
||||
String diskCacheDirectory; |
||||
SandboxExtension::Handle diskCacheDirectoryExtensionHandle; |
||||
diff -up webkitgtk-2.20.3/Source/WebKit/Shared/Plugins/PluginProcessCreationParameters.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/WebKit/Shared/Plugins/PluginProcessCreationParameters.h |
||||
--- webkitgtk-2.20.3/Source/WebKit/Shared/Plugins/PluginProcessCreationParameters.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:32.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebKit/Shared/Plugins/PluginProcessCreationParameters.h 2018-06-18 09:07:12.045744761 +0200 |
||||
@@ -49,7 +49,7 @@ struct PluginProcessCreationParameters { |
||||
void encode(IPC::Encoder&) const; |
||||
static bool decode(IPC::Decoder&, PluginProcessCreationParameters&); |
||||
|
||||
- PluginProcessType processType; |
||||
+ PluginProcessType processType { PluginProcessTypeNormal }; |
||||
bool supportsAsynchronousPluginInitialization; |
||||
|
||||
Seconds minimumLifetime; |
||||
diff -up webkitgtk-2.20.3/Source/WebKit/UIProcess/API/glib/IconDatabase.h.covscan_fixes_uninit_ctor webkitgtk-2.20.3/Source/WebKit/UIProcess/API/glib/IconDatabase.h |
||||
--- webkitgtk-2.20.3/Source/WebKit/UIProcess/API/glib/IconDatabase.h.covscan_fixes_uninit_ctor 2018-02-19 08:45:33.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/WebKit/UIProcess/API/glib/IconDatabase.h 2018-06-18 09:07:12.050744740 +0200 |
||||
@@ -226,7 +226,7 @@ private: |
||||
|
||||
Deque<Function<void()>> m_notificationQueue; |
||||
Lock m_notificationQueueLock; |
||||
- Atomic<bool> m_isActive; |
||||
+ Atomic<bool> m_isActive { false }; |
||||
RunLoop::Timer<MainThreadNotifier> m_timer; |
||||
}; |
||||
|
@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
|
||||
From 726cf686973683b1af76e3d9f5029cbe6d82edad Mon Sep 17 00:00:00 2001 |
||||
From: Tomas Popela <tpopela@redhat.com> |
||||
Date: Tue, 24 Jul 2018 13:21:55 +0200 |
||||
Subject: [PATCH 2/2] wip |
||||
|
||||
--- |
||||
Source/WTF/wtf/text/WTFString.cpp | 11 +++++++---- |
||||
1 file changed, 7 insertions(+), 4 deletions(-) |
||||
|
||||
diff --git a/Source/WTF/wtf/text/WTFString.cpp b/Source/WTF/wtf/text/WTFString.cpp |
||||
index 9c5edd6a992..57bf1f8d06a 100644 |
||||
--- a/Source/WTF/wtf/text/WTFString.cpp |
||||
+++ b/Source/WTF/wtf/text/WTFString.cpp |
||||
@@ -462,7 +462,7 @@ WTF_ATTRIBUTE_PRINTF(1, 0) static String createWithFormatAndArguments(const char |
||||
if (strstr(format, "%@")) { |
||||
auto cfFormat = adoptCF(CFStringCreateWithCString(kCFAllocatorDefault, format, kCFStringEncodingUTF8)); |
||||
auto result = adoptCF(CFStringCreateWithFormatAndArguments(kCFAllocatorDefault, nullptr, cfFormat.get(), args)); |
||||
- va_end(args); |
||||
+ va_end(argsCopy); |
||||
return result.get(); |
||||
} |
||||
#endif |
||||
@@ -474,12 +474,15 @@ WTF_ATTRIBUTE_PRINTF(1, 0) static String createWithFormatAndArguments(const char |
||||
char ch; |
||||
int result = vsnprintf(&ch, 1, format, args); |
||||
#endif |
||||
- va_end(args); |
||||
|
||||
- if (result == 0) |
||||
+ if (!result) { |
||||
+ va_end(argsCopy); |
||||
return emptyString(); |
||||
- if (result < 0) |
||||
+ } |
||||
+ if (result < 0) { |
||||
+ va_end(argsCopy); |
||||
return String(); |
||||
+ } |
||||
|
||||
Vector<char, 256> buffer; |
||||
unsigned len = result; |
||||
-- |
||||
2.17.1 |
||||
|
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
diff --git a/Source/WTF/wtf/CheckedArithmetic.h b/Source/WTF/wtf/CheckedArithmetic.h |
||||
index 31be98b0929b5924bd5dfee55482af8d3807d9ca..e668bf8a8364c6959e146084e77dd64d5af26987 100644 |
||||
--- a/Source/WTF/wtf/CheckedArithmetic.h |
||||
+++ b/Source/WTF/wtf/CheckedArithmetic.h |
||||
@@ -489,7 +489,7 @@ template <typename ResultType> struct ArithmeticOperations<unsigned, int, Result |
||||
|
||||
static inline bool multiply(int64_t lhs, int64_t rhs, ResultType& result) |
||||
{ |
||||
- return ArithmeticOperations<int, unsigned, ResultType>::multiply(rhs, lhs, result); |
||||
+ return ArithmeticOperations<int, unsigned, ResultType>::multiply(lhs, rhs, result); |
||||
} |
||||
|
||||
static inline bool equals(unsigned lhs, int rhs) |
||||
diff --git a/Source/WTF/wtf/ThreadSpecific.h b/Source/WTF/wtf/ThreadSpecific.h |
||||
index 1be1204cddf694521e82a576b8854237d0b59ee1..fc75b241e9eb6510d8cdd7c3fd0a3c1049b87d8e 100644 |
||||
--- a/Source/WTF/wtf/ThreadSpecific.h |
||||
+++ b/Source/WTF/wtf/ThreadSpecific.h |
||||
@@ -122,7 +122,7 @@ private: |
||||
void static THREAD_SPECIFIC_CALL destroy(void* ptr); |
||||
|
||||
#if USE(PTHREADS) |
||||
- pthread_key_t m_key; |
||||
+ pthread_key_t m_key { }; |
||||
#elif OS(WINDOWS) |
||||
int m_index; |
||||
#endif |
||||
diff --git a/Source/WTF/wtf/dtoa.cpp b/Source/WTF/wtf/dtoa.cpp |
||||
index edefd7f884305fc2c20cb3f3bc571a7f980e30f7..7b5f59290101c3abb754c55f1ea4e11a7ec23258 100644 |
||||
--- a/Source/WTF/wtf/dtoa.cpp |
||||
+++ b/Source/WTF/wtf/dtoa.cpp |
||||
@@ -360,7 +360,7 @@ struct P5Node { |
||||
public: |
||||
P5Node() { } |
||||
BigInt val; |
||||
- P5Node* next; |
||||
+ P5Node* next { nullptr }; |
||||
}; |
||||
|
||||
static P5Node* p5s; |
@ -0,0 +1,35 @@
@@ -0,0 +1,35 @@
|
||||
From ecbb859d88eacad10bf556044abaeaed6c9b32fc Mon Sep 17 00:00:00 2001 |
||||
From: "berto@igalia.com" |
||||
<berto@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc> |
||||
Date: Thu, 2 Nov 2017 13:41:16 +0000 |
||||
Subject: [PATCH] Unreviewed, fix typos in library names for the GTK+ port. |
||||
|
||||
* Source/cmake/OptionsGTK.cmake: |
||||
|
||||
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@224329 268f45cc-cd09-0410-ab3c-d52691b4dbfc |
||||
--- |
||||
ChangeLog | 6 ++++++ |
||||
Source/cmake/OptionsGTK.cmake | 4 ++-- |
||||
2 files changed, 8 insertions(+), 2 deletions(-) |
||||
|
||||
diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake |
||||
index 2b440a27376..6c99868ae86 100644 |
||||
--- a/Source/cmake/OptionsGTK.cmake |
||||
+++ b/Source/cmake/OptionsGTK.cmake |
||||
@@ -367,11 +367,11 @@ endif () |
||||
if (USE_WOFF2) |
||||
find_package(BrotliDec 1.0.1) |
||||
if (NOT BROTLIDEC_FOUND) |
||||
- message(FATAL_ERROR "librotlidec is needed for USE_WOFF2.") |
||||
+ message(FATAL_ERROR "libbrotlidec is needed for USE_WOFF2.") |
||||
endif () |
||||
find_package(WOFF2Dec 1.0.1) |
||||
if (NOT WOFF2DEC_FOUND) |
||||
- message(FATAL_ERROR "liwoff2dec is needed for USE_WOFF2.") |
||||
+ message(FATAL_ERROR "libwoff2dec is needed for USE_WOFF2.") |
||||
endif () |
||||
endif () |
||||
|
||||
-- |
||||
2.16.2 |
||||
|
@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
|
||||
diff -up webkitgtk-2.16.6/Source/cmake/OptionsGTK.cmake.libgcrypt webkitgtk-2.16.6/Source/cmake/OptionsGTK.cmake |
||||
--- webkitgtk-2.16.6/Source/cmake/OptionsGTK.cmake.libgcrypt 2017-08-07 11:55:53.254869026 +0200 |
||||
+++ webkitgtk-2.16.6/Source/cmake/OptionsGTK.cmake 2017-08-07 11:56:11.259673114 +0200 |
||||
@@ -32,7 +32,7 @@ set(INTROSPECTION_INSTALL_TYPELIBDIR "${ |
||||
find_package(Cairo 1.10.2 REQUIRED) |
||||
find_package(Fontconfig 2.8.0 REQUIRED) |
||||
find_package(Freetype2 2.4.2 REQUIRED) |
||||
-find_package(LibGcrypt 1.6.0 REQUIRED) |
||||
+find_package(LibGcrypt 1.5.3 REQUIRED) |
||||
find_package(GTK3 3.6.0 REQUIRED) |
||||
find_package(GDK3 3.6.0 REQUIRED) |
||||
find_package(HarfBuzz 0.9.2 REQUIRED) |
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
diff -up webkitgtk-2.20.3/Source/JavaScriptCore/runtime/HashMapImpl.h.memset_zero_length webkitgtk-2.20.3/Source/JavaScriptCore/runtime/HashMapImpl.h |
||||
--- webkitgtk-2.20.3/Source/JavaScriptCore/runtime/HashMapImpl.h.memset_zero_length 2018-02-19 08:45:16.000000000 +0100 |
||||
+++ webkitgtk-2.20.3/Source/JavaScriptCore/runtime/HashMapImpl.h 2018-06-26 09:29:58.672408600 +0200 |
||||
@@ -220,7 +220,10 @@ public: |
||||
|
||||
ALWAYS_INLINE void reset(uint32_t capacity) |
||||
{ |
||||
- memset(this, -1, allocationSize(capacity)); |
||||
+#if COMPILER(GCC_OR_CLANG) && defined(_FORTIFY_SOURCE) |
||||
+ if (capacity && allocationSize(capacity)) |
||||
+#endif |
||||
+ memset(this, -1, allocationSize(capacity)); |
||||
} |
||||
}; |
||||
|
@ -0,0 +1,197 @@
@@ -0,0 +1,197 @@
|
||||
diff --git a/Tools/MiniBrowser/gtk/BrowserWindow.c b/Tools/MiniBrowser/gtk/BrowserWindow.c |
||||
index ece39c1b3c4..36b30657c9a 100644 |
||||
--- a/Tools/MiniBrowser/gtk/BrowserWindow.c |
||||
+++ b/Tools/MiniBrowser/gtk/BrowserWindow.c |
||||
@@ -491,6 +491,7 @@ static void faviconChanged(WebKitWebView *webView, GParamSpec *paramSpec, Browse |
||||
static void webViewIsLoadingChanged(WebKitWebView *webView, GParamSpec *paramSpec, BrowserWindow *window) |
||||
{ |
||||
gboolean isLoading = webkit_web_view_is_loading(webView); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(window->reloadOrStopButton), isLoading ? "Stop" : "Reload"); |
||||
gtk_tool_button_set_stock_id(GTK_TOOL_BUTTON(window->reloadOrStopButton), isLoading ? GTK_STOCK_STOP : GTK_STOCK_REFRESH); |
||||
} |
||||
|
||||
@@ -710,6 +711,7 @@ static void browserWindowSetupEditorToolbar(BrowserWindow *window) |
||||
GtkToolItem *item = gtk_toggle_tool_button_new_from_stock(GTK_STOCK_BOLD); |
||||
window->boldItem = GTK_WIDGET(item); |
||||
gtk_widget_set_name(GTK_WIDGET(item), "Bold"); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Bold"); |
||||
g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(editingCommandCallback), window); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
@@ -717,6 +719,7 @@ static void browserWindowSetupEditorToolbar(BrowserWindow *window) |
||||
item = gtk_toggle_tool_button_new_from_stock(GTK_STOCK_ITALIC); |
||||
window->italicItem = GTK_WIDGET(item); |
||||
gtk_widget_set_name(GTK_WIDGET(item), "Italic"); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Italic"); |
||||
g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(editingCommandCallback), window); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
@@ -724,12 +727,14 @@ static void browserWindowSetupEditorToolbar(BrowserWindow *window) |
||||
item = gtk_toggle_tool_button_new_from_stock(GTK_STOCK_UNDERLINE); |
||||
window->underlineItem = GTK_WIDGET(item); |
||||
gtk_widget_set_name(GTK_WIDGET(item), "Underline"); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Underline"); |
||||
g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(editingCommandCallback), window); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
|
||||
item = gtk_toggle_tool_button_new_from_stock(GTK_STOCK_STRIKETHROUGH); |
||||
gtk_widget_set_name(GTK_WIDGET(item), "Strikethrough"); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Strikethrough"); |
||||
window->strikethroughItem = GTK_WIDGET(item); |
||||
g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(editingCommandCallback), window); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
@@ -741,18 +746,21 @@ static void browserWindowSetupEditorToolbar(BrowserWindow *window) |
||||
|
||||
item = gtk_tool_button_new_from_stock(GTK_STOCK_CUT); |
||||
gtk_widget_set_name(GTK_WIDGET(item), WEBKIT_EDITING_COMMAND_CUT); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), WEBKIT_EDITING_COMMAND_CUT); |
||||
g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(editingCommandCallback), window); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
|
||||
item = gtk_tool_button_new_from_stock(GTK_STOCK_COPY); |
||||
gtk_widget_set_name(GTK_WIDGET(item), WEBKIT_EDITING_COMMAND_COPY); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), WEBKIT_EDITING_COMMAND_COPY); |
||||
g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(editingCommandCallback), window); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
|
||||
item = gtk_tool_button_new_from_stock(GTK_STOCK_PASTE); |
||||
gtk_widget_set_name(GTK_WIDGET(item), WEBKIT_EDITING_COMMAND_PASTE); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), WEBKIT_EDITING_COMMAND_PASTE); |
||||
g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(editingCommandCallback), window); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
@@ -763,12 +771,14 @@ static void browserWindowSetupEditorToolbar(BrowserWindow *window) |
||||
|
||||
item = gtk_tool_button_new_from_stock(GTK_STOCK_UNDO); |
||||
gtk_widget_set_name(GTK_WIDGET(item), WEBKIT_EDITING_COMMAND_UNDO); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), WEBKIT_EDITING_COMMAND_UNDO); |
||||
g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(editingCommandCallback), window); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
|
||||
item = gtk_tool_button_new_from_stock(GTK_STOCK_REDO); |
||||
gtk_widget_set_name(GTK_WIDGET(item), WEBKIT_EDITING_COMMAND_REDO); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), WEBKIT_EDITING_COMMAND_REDO); |
||||
g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(editingCommandCallback), window); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
@@ -780,6 +790,7 @@ static void browserWindowSetupEditorToolbar(BrowserWindow *window) |
||||
item = gtk_radio_tool_button_new_from_stock(NULL, GTK_STOCK_JUSTIFY_LEFT); |
||||
GSList *justifyRadioGroup = gtk_radio_tool_button_get_group(GTK_RADIO_TOOL_BUTTON(item)); |
||||
gtk_widget_set_name(GTK_WIDGET(item), "JustifyLeft"); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Justify Left"); |
||||
g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(editingCommandCallback), window); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
@@ -787,12 +798,14 @@ static void browserWindowSetupEditorToolbar(BrowserWindow *window) |
||||
item = gtk_radio_tool_button_new_from_stock(justifyRadioGroup, GTK_STOCK_JUSTIFY_CENTER); |
||||
justifyRadioGroup = gtk_radio_tool_button_get_group(GTK_RADIO_TOOL_BUTTON(item)); |
||||
gtk_widget_set_name(GTK_WIDGET(item), "JustifyCenter"); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Justify Center"); |
||||
g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(editingCommandCallback), window); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
|
||||
item = gtk_radio_tool_button_new_from_stock(justifyRadioGroup, GTK_STOCK_JUSTIFY_RIGHT); |
||||
gtk_widget_set_name(GTK_WIDGET(item), "JustifyRight"); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Justify Right"); |
||||
g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(editingCommandCallback), window); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
@@ -803,12 +816,14 @@ static void browserWindowSetupEditorToolbar(BrowserWindow *window) |
||||
|
||||
item = gtk_tool_button_new_from_stock(GTK_STOCK_INDENT); |
||||
gtk_widget_set_name(GTK_WIDGET(item), "Indent"); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Indent"); |
||||
g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(editingCommandCallback), window); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
|
||||
item = gtk_tool_button_new_from_stock(GTK_STOCK_UNINDENT); |
||||
gtk_widget_set_name(GTK_WIDGET(item), "Outdent"); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Outdent"); |
||||
g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(editingCommandCallback), window); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
@@ -819,12 +834,14 @@ static void browserWindowSetupEditorToolbar(BrowserWindow *window) |
||||
|
||||
item = gtk_tool_button_new(NULL, NULL); |
||||
gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(item), "insert-image"); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Insert Image"); |
||||
g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(insertImageCommandCallback), window); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
|
||||
item = gtk_tool_button_new(NULL, NULL); |
||||
gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(item), "insert-link"); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Insert Link"); |
||||
g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(insertLinkCommandCallback), window); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
@@ -976,6 +993,7 @@ static void browser_window_init(BrowserWindow *window) |
||||
window->backItem = GTK_WIDGET(item); |
||||
gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(item), 0); |
||||
g_signal_connect_swapped(item, "clicked", G_CALLBACK(goBackCallback), (gpointer)window); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Back"); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
|
||||
@@ -983,40 +1001,47 @@ static void browser_window_init(BrowserWindow *window) |
||||
window->forwardItem = GTK_WIDGET(item); |
||||
gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(item), 0); |
||||
g_signal_connect_swapped(G_OBJECT(item), "clicked", G_CALLBACK(goForwardCallback), (gpointer)window); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Forward"); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
|
||||
item = gtk_tool_button_new_from_stock(GTK_STOCK_PREFERENCES); |
||||
g_signal_connect_swapped(G_OBJECT(item), "clicked", G_CALLBACK(settingsCallback), window); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Preferences"); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
|
||||
item = gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_OUT); |
||||
window->zoomOutItem = GTK_WIDGET(item); |
||||
g_signal_connect_swapped(item, "clicked", G_CALLBACK(zoomOutCallback), window); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Zoom Out"); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
|
||||
item = gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_IN); |
||||
window->zoomInItem = GTK_WIDGET(item); |
||||
g_signal_connect_swapped(item, "clicked", G_CALLBACK(zoomInCallback), window); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Zoom In"); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
|
||||
item = gtk_tool_button_new_from_stock(GTK_STOCK_FIND); |
||||
g_signal_connect_swapped(item, "clicked", G_CALLBACK(searchCallback), window); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Find"); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_add_accelerator(GTK_WIDGET(item), "clicked", window->accelGroup, GDK_KEY_F, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
|
||||
item = gtk_tool_button_new_from_stock(GTK_STOCK_HOME); |
||||
g_signal_connect_swapped(item, "clicked", G_CALLBACK(loadHomePage), window); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Home"); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_add_accelerator(GTK_WIDGET(item), "clicked", window->accelGroup, GDK_KEY_Home, GDK_MOD1_MASK, GTK_ACCEL_VISIBLE); |
||||
gtk_widget_show(GTK_WIDGET(item)); |
||||
|
||||
item = gtk_tool_button_new(gtk_image_new_from_icon_name("tab-new", GTK_ICON_SIZE_SMALL_TOOLBAR), NULL); |
||||
g_signal_connect_swapped(item, "clicked", G_CALLBACK(newTabCallback), window); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "New Tab"); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_add_accelerator(GTK_WIDGET(item), "clicked", window->accelGroup, GDK_KEY_T, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); |
||||
gtk_widget_show_all(GTK_WIDGET(item)); |
||||
@@ -1031,6 +1056,7 @@ static void browser_window_init(BrowserWindow *window) |
||||
item = gtk_tool_button_new_from_stock(GTK_STOCK_REFRESH); |
||||
window->reloadOrStopButton = GTK_WIDGET(item); |
||||
g_signal_connect_swapped(item, "clicked", G_CALLBACK(reloadOrStopCallback), window); |
||||
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(item), "Reload"); |
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1); |
||||
gtk_widget_add_accelerator(window->reloadOrStopButton, "clicked", window->accelGroup, GDK_KEY_F5, 0, GTK_ACCEL_VISIBLE); |
||||
gtk_widget_show(window->reloadOrStopButton); |
@ -0,0 +1,513 @@
@@ -0,0 +1,513 @@
|
||||
diff -up webkitgtk-2.20.2/Source/cmake/FindWebP.cmake.no_webp_demux webkitgtk-2.20.2/Source/cmake/FindWebP.cmake |
||||
--- webkitgtk-2.20.2/Source/cmake/FindWebP.cmake.no_webp_demux 2018-02-19 08:45:33.000000000 +0100 |
||||
+++ webkitgtk-2.20.2/Source/cmake/FindWebP.cmake 2018-05-11 08:36:41.026235222 +0200 |
||||
@@ -33,34 +33,20 @@ find_package(PkgConfig) |
||||
pkg_check_modules(PC_WEBP QUIET libwebp) |
||||
|
||||
# Look for the header file. |
||||
-find_path(WEBP_INCLUDE_DIR |
||||
+find_path(WEBP_INCLUDE_DIRS |
||||
NAMES webp/decode.h |
||||
HINTS ${PC_WEBP_INCLUDEDIR} ${PC_WEBP_INCLUDE_DIRS} |
||||
) |
||||
-list(APPEND WEBP_INCLUDE_DIRS ${WEBP_INCLUDE_DIR}) |
||||
mark_as_advanced(WEBP_INCLUDE_DIRS) |
||||
|
||||
# Look for the library. |
||||
find_library( |
||||
- WEBP_LIBRARY |
||||
+ WEBP_LIBRARIES |
||||
NAMES webp |
||||
HINTS ${PC_WEBP_LIBDIR} ${PC_WEBP_LIBRARY_DIRS} |
||||
) |
||||
-list(APPEND WEBP_LIBRARIES ${WEBP_LIBRARY}) |
||||
mark_as_advanced(WEBP_LIBRARIES) |
||||
|
||||
-find_path(WEBP_DEMUX_INCLUDE_DIR |
||||
- NAMES webp/demux.h |
||||
- HINTS ${PC_WEBP_INCLUDEDIR} ${PC_WEBP_INCLUDE_DIRS} |
||||
-) |
||||
-list(APPEND WEBP_INCLUDE_DIRS ${WEBP_DEMUX_INCLUDE_DIR}) |
||||
- |
||||
-find_library(WEBP_DEMUX_LIBRARY |
||||
- NAMES webpdemux |
||||
- HINTS ${PC_WEBP_LIBDIR} ${PC_WEBP_LIBRARY_DIRS} |
||||
-) |
||||
-list(APPEND WEBP_LIBRARIES ${WEBP_DEMUX_LIBRARY}) |
||||
- |
||||
include(FindPackageHandleStandardArgs) |
||||
find_package_handle_standard_args(WebP REQUIRED_VARS WEBP_INCLUDE_DIRS WEBP_LIBRARIES |
||||
FOUND_VAR WEBP_FOUND) |
||||
diff -up webkitgtk-2.20.2/Source/WebCore/platform/graphics/ImageBackingStore.h.no_webp_demux webkitgtk-2.20.2/Source/WebCore/platform/graphics/ImageBackingStore.h |
||||
--- webkitgtk-2.20.2/Source/WebCore/platform/graphics/ImageBackingStore.h.no_webp_demux 2018-02-19 08:45:32.000000000 +0100 |
||||
+++ webkitgtk-2.20.2/Source/WebCore/platform/graphics/ImageBackingStore.h 2018-05-11 08:36:41.027235218 +0200 |
||||
@@ -147,6 +147,7 @@ public: |
||||
setPixel(pixelAt(x, y), r, g, b, a); |
||||
} |
||||
|
||||
+#if ENABLE(APNG) |
||||
void blendPixel(RGBA32* dest, unsigned r, unsigned g, unsigned b, unsigned a) |
||||
{ |
||||
if (!a) |
||||
@@ -172,6 +173,7 @@ public: |
||||
else |
||||
*dest = makeUnPremultipliedRGBA(r, g, b, a); |
||||
} |
||||
+#endif |
||||
|
||||
static bool isOverSize(const IntSize& size) |
||||
{ |
||||
diff -up webkitgtk-2.20.2/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp.no_webp_demux webkitgtk-2.20.2/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp |
||||
--- webkitgtk-2.20.2/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp.no_webp_demux 2018-02-19 08:45:32.000000000 +0100 |
||||
+++ webkitgtk-2.20.2/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp 2018-05-11 09:19:25.756550925 +0200 |
||||
@@ -31,49 +31,47 @@ |
||||
|
||||
#if USE(WEBP) |
||||
|
||||
-namespace WebCore { |
||||
+// Backward emulation for earlier versions than 0.1.99. |
||||
+#if (WEBP_DECODER_ABI_VERSION < 0x0163) |
||||
+#define MODE_rgbA MODE_RGBA |
||||
+#define MODE_bgrA MODE_BGRA |
||||
+#endif |
||||
+ |
||||
+#if CPU(BIG_ENDIAN) || CPU(MIDDLE_ENDIAN) |
||||
+inline WEBP_CSP_MODE outputMode(bool hasAlpha) { return hasAlpha ? MODE_rgbA : MODE_RGBA; } |
||||
+#else // LITTLE_ENDIAN, output BGRA pixels. |
||||
+inline WEBP_CSP_MODE outputMode(bool hasAlpha) { return hasAlpha ? MODE_bgrA : MODE_BGRA; } |
||||
+#endif |
||||
|
||||
-// Convenience function to improve code readability, as WebPDemuxGetFrame is +1 based. |
||||
-bool webpFrameAtIndex(WebPDemuxer* demuxer, size_t index, WebPIterator* webpFrame) |
||||
-{ |
||||
- return WebPDemuxGetFrame(demuxer, index + 1, webpFrame); |
||||
-} |
||||
+namespace WebCore { |
||||
|
||||
WEBPImageDecoder::WEBPImageDecoder(AlphaOption alphaOption, GammaAndColorProfileOption gammaAndColorProfileOption) |
||||
: ScalableImageDecoder(alphaOption, gammaAndColorProfileOption) |
||||
+ , m_decoder(0) |
||||
+ , m_hasAlpha(false) |
||||
{ |
||||
} |
||||
|
||||
-WEBPImageDecoder::~WEBPImageDecoder() = default; |
||||
- |
||||
-void WEBPImageDecoder::setData(SharedBuffer& data, bool allDataReceived) |
||||
+WEBPImageDecoder::~WEBPImageDecoder() |
||||
{ |
||||
- if (failed()) |
||||
- return; |
||||
- |
||||
- // We need to ensure that the header is parsed everytime new data arrives, as the number |
||||
- // of frames may change until we have the complete data. If the size has not been obtained |
||||
- // yet, the call to ScalableImageDecoder::setData() will call parseHeader() and set |
||||
- // m_headerParsed to true, so the call to parseHeader() at the end won't do anything. If the size |
||||
- // is available, then parseHeader() is only called once. |
||||
- m_headerParsed = false; |
||||
- ScalableImageDecoder::setData(data, allDataReceived); |
||||
- parseHeader(); |
||||
+ clear(); |
||||
} |
||||
|
||||
-RepetitionCount WEBPImageDecoder::repetitionCount() const |
||||
+void WEBPImageDecoder::clear() |
||||
{ |
||||
- if (failed()) |
||||
- return RepetitionCountOnce; |
||||
- |
||||
- return m_repetitionCount ? m_repetitionCount : RepetitionCountInfinite; |
||||
+ if (m_decoder) |
||||
+ WebPIDelete(m_decoder); |
||||
+ m_decoder = 0; |
||||
} |
||||
|
||||
ImageFrame* WEBPImageDecoder::frameBufferAtIndex(size_t index) |
||||
{ |
||||
- if (index >= frameCount()) |
||||
+ if (index) |
||||
return 0; |
||||
|
||||
+ if (m_frameBufferCache.isEmpty()) |
||||
+ m_frameBufferCache.grow(1); |
||||
+ |
||||
// The size of m_frameBufferCache may be smaller than the index requested. This can happen |
||||
// because new data may have arrived with a bigger frameCount, but decode() hasn't been called |
||||
// yet, which is the one that resizes the cache. |
||||
@@ -85,275 +83,73 @@ ImageFrame* WEBPImageDecoder::frameBuffe |
||||
return &m_frameBufferCache[index]; |
||||
} |
||||
|
||||
-size_t WEBPImageDecoder::findFirstRequiredFrameToDecode(size_t frameIndex, WebPDemuxer* demuxer) |
||||
-{ |
||||
- // The first frame doesn't depend on any other. |
||||
- if (!frameIndex) |
||||
- return 0; |
||||
- |
||||
- // Go backwards and find the first complete frame. |
||||
- size_t firstIncompleteFrame = frameIndex; |
||||
- for (; firstIncompleteFrame; --firstIncompleteFrame) { |
||||
- if (m_frameBufferCache[firstIncompleteFrame - 1].isComplete()) |
||||
- break; |
||||
- } |
||||
- |
||||
- // Check if there are any independent frames between firstIncompleteFrame and frameIndex. |
||||
- for (size_t firstIndependentFrame = frameIndex; firstIndependentFrame > firstIncompleteFrame ; --firstIndependentFrame) { |
||||
- WebPIterator webpFrame; |
||||
- if (!webpFrameAtIndex(demuxer, firstIndependentFrame, &webpFrame)) |
||||
- continue; |
||||
- |
||||
- IntRect frameRect(webpFrame.x_offset, webpFrame.y_offset, webpFrame.width, webpFrame.height); |
||||
- if (!frameRect.contains({ { }, size() })) |
||||
- continue; |
||||
- |
||||
- // This frame covers the whole area and doesn't have alpha, so it can be rendered without |
||||
- // dependencies. |
||||
- if (!webpFrame.has_alpha) |
||||
- return firstIndependentFrame; |
||||
- |
||||
- // This frame covers the whole area and its disposalMethod is RestoreToBackground, which means |
||||
- // that the next frame will be rendered on top of a transparent background, and can be decoded |
||||
- // without dependencies. This can only be checked for frames prior to frameIndex. |
||||
- if (firstIndependentFrame < frameIndex && m_frameBufferCache[firstIndependentFrame].disposalMethod() == ImageFrame::DisposalMethod::RestoreToBackground) |
||||
- return firstIndependentFrame + 1; |
||||
- } |
||||
- |
||||
- return firstIncompleteFrame; |
||||
-} |
||||
- |
||||
-void WEBPImageDecoder::decode(size_t frameIndex, bool allDataReceived) |
||||
+bool WEBPImageDecoder::decode(bool onlySize, bool) |
||||
{ |
||||
if (failed()) |
||||
- return; |
||||
- |
||||
- // This can be executed both in the main thread (when not using async decoding) or in the decoding thread. |
||||
- // When executed in the decoding thread, a call to setData() from the main thread may change the data |
||||
- // the WebPDemuxer is using, leaving it in an inconsistent state, so we need to protect the data. |
||||
- RefPtr<SharedBuffer> protectedData(m_data); |
||||
- WebPData inputData = { reinterpret_cast<const uint8_t*>(protectedData->data()), protectedData->size() }; |
||||
- WebPDemuxState demuxerState; |
||||
- WebPDemuxer* demuxer = WebPDemuxPartial(&inputData, &demuxerState); |
||||
- if (!demuxer) { |
||||
- setFailed(); |
||||
- return; |
||||
- } |
||||
- |
||||
- m_frameBufferCache.resize(m_frameCount); |
||||
- |
||||
- // It is a fatal error if all data is received and we have decoded all frames available but the file is truncated. |
||||
- if (frameIndex >= m_frameBufferCache.size() - 1 && allDataReceived && demuxer && demuxerState != WEBP_DEMUX_DONE) { |
||||
- WebPDemuxDelete(demuxer); |
||||
- setFailed(); |
||||
- return; |
||||
- } |
||||
- |
||||
- for (size_t i = findFirstRequiredFrameToDecode(frameIndex, demuxer); i <= frameIndex; i++) |
||||
- decodeFrame(i, demuxer); |
||||
+ return false; |
||||
|
||||
- WebPDemuxDelete(demuxer); |
||||
-} |
||||
+ const uint8_t* dataBytes = reinterpret_cast<const uint8_t*>(m_data->data()); |
||||
+ const size_t dataSize = m_data->size(); |
||||
|
||||
-void WEBPImageDecoder::decodeFrame(size_t frameIndex, WebPDemuxer* demuxer) |
||||
-{ |
||||
- if (failed()) |
||||
- return; |
||||
+ if (ScalableImageDecoder::encodedDataStatus() < EncodedDataStatus::SizeAvailable) { |
||||
+ static const size_t imageHeaderSize = 30; |
||||
+ if (dataSize < imageHeaderSize) |
||||
+ return false; |
||||
+ int width, height; |
||||
+#if (WEBP_DECODER_ABI_VERSION >= 0x0163) |
||||
+ WebPBitstreamFeatures features; |
||||
+ if (WebPGetFeatures(dataBytes, dataSize, &features) != VP8_STATUS_OK) |
||||
+ return setFailed(); |
||||
+ width = features.width; |
||||
+ height = features.height; |
||||
+ m_hasAlpha = features.has_alpha; |
||||
+#else |
||||
+ // Earlier version won't be able to display WebP files with alpha. |
||||
+ if (!WebPGetInfo(dataBytes, dataSize, &width, &height)) |
||||
+ return setFailed(); |
||||
+ m_hasAlpha = false; |
||||
+#endif |
||||
+ if (!setSize(IntSize(width, height))) |
||||
+ return setFailed(); |
||||
+ } |
||||
+ |
||||
+ ASSERT(ScalableImageDecoder::encodedDataStatus() >= EncodedDataStatus::SizeAvailable); |
||||
+ if (onlySize) |
||||
+ return true; |
||||
|
||||
- WebPIterator webpFrame; |
||||
- if (!webpFrameAtIndex(demuxer, frameIndex, &webpFrame)) |
||||
- return; |
||||
- |
||||
- const uint8_t* dataBytes = reinterpret_cast<const uint8_t*>(webpFrame.fragment.bytes); |
||||
- size_t dataSize = webpFrame.fragment.size; |
||||
- bool blend = webpFrame.blend_method == WEBP_MUX_BLEND ? true : false; |
||||
- |
||||
- ASSERT(m_frameBufferCache.size() > frameIndex); |
||||
- ImageFrame& buffer = m_frameBufferCache[frameIndex]; |
||||
- buffer.setDuration(Seconds::fromMilliseconds(webpFrame.duration)); |
||||
- buffer.setDisposalMethod(webpFrame.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND ? ImageFrame::DisposalMethod::RestoreToBackground : ImageFrame::DisposalMethod::DoNotDispose); |
||||
+ ASSERT(!m_frameBufferCache.isEmpty()); |
||||
+ ImageFrame& buffer = m_frameBufferCache[0]; |
||||
ASSERT(!buffer.isComplete()); |
||||
|
||||
- if (buffer.isInvalid() && !initFrameBuffer(frameIndex, &webpFrame)) { |
||||
- setFailed(); |
||||
- return; |
||||
- } |
||||
- |
||||
- WebPDecBuffer decoderBuffer; |
||||
- WebPInitDecBuffer(&decoderBuffer); |
||||
- decoderBuffer.colorspace = MODE_RGBA; |
||||
- decoderBuffer.u.RGBA.stride = webpFrame.width * sizeof(RGBA32); |
||||
- decoderBuffer.u.RGBA.size = decoderBuffer.u.RGBA.stride * webpFrame.height; |
||||
- decoderBuffer.is_external_memory = 1; |
||||
- std::unique_ptr<unsigned char[]> p(new uint8_t[decoderBuffer.u.RGBA.size]()); |
||||
- decoderBuffer.u.RGBA.rgba = p.get(); |
||||
- if (!decoderBuffer.u.RGBA.rgba) { |
||||
- setFailed(); |
||||
- return; |
||||
- } |
||||
- |
||||
- WebPIDecoder* decoder = WebPINewDecoder(&decoderBuffer); |
||||
- if (!decoder) { |
||||
- setFailed(); |
||||
- return; |
||||
+ if (buffer.isInvalid()) { |
||||
+ if (!buffer.initialize(size(), m_premultiplyAlpha)) |
||||
+ return setFailed(); |
||||
+ buffer.setDecodingStatus(DecodingStatus::Partial); |
||||
+ buffer.setHasAlpha(m_hasAlpha); |
||||
+ } |
||||
+ |
||||
+ if (!m_decoder) { |
||||
+ WEBP_CSP_MODE mode = outputMode(m_hasAlpha); |
||||
+ if (!m_premultiplyAlpha) |
||||
+ mode = outputMode(false); |
||||
+ int rowStride = size().width() * sizeof(RGBA32); |
||||
+ uint8_t* output = reinterpret_cast<uint8_t*>(buffer.backingStore()->pixelAt(0, 0)); |
||||
+ int outputSize = size().height() * rowStride; |
||||
+ m_decoder = WebPINewRGB(mode, output, outputSize, rowStride); |
||||
+ if (!m_decoder) |
||||
+ return setFailed(); |
||||
} |
||||
|
||||
- switch (WebPIUpdate(decoder, dataBytes, dataSize)) { |
||||
+ switch (WebPIUpdate(m_decoder, dataBytes, dataSize)) { |
||||
case VP8_STATUS_OK: |
||||
- applyPostProcessing(frameIndex, decoder, decoderBuffer, blend); |
||||
buffer.setDecodingStatus(DecodingStatus::Complete); |
||||
- break; |
||||
+ clear(); |
||||
+ return true; |
||||
case VP8_STATUS_SUSPENDED: |
||||
- if (!isAllDataReceived()) { |
||||
- applyPostProcessing(frameIndex, decoder, decoderBuffer, blend); |
||||
- buffer.setDecodingStatus(DecodingStatus::Partial); |
||||
- break; |
||||
- } |
||||
- // Fallthrough. |
||||
- default: |
||||
- setFailed(); |
||||
- } |
||||
- |
||||
- WebPIDelete(decoder); |
||||
-} |
||||
- |
||||
-bool WEBPImageDecoder::initFrameBuffer(size_t frameIndex, const WebPIterator* webpFrame) |
||||
-{ |
||||
- if (frameIndex >= frameCount()) |
||||
return false; |
||||
- |
||||
- ImageFrame& buffer = m_frameBufferCache[frameIndex]; |
||||
- |
||||
- // Initialize the frame rect in our buffer. |
||||
- IntRect frameRect(webpFrame->x_offset, webpFrame->y_offset, webpFrame->width, webpFrame->height); |
||||
- |
||||
- // Make sure the frameRect doesn't extend outside the buffer. |
||||
- frameRect.intersect({ { }, size() }); |
||||
- |
||||
- if (!frameIndex || !m_frameBufferCache[frameIndex - 1].backingStore()) { |
||||
- // This frame doesn't rely on any previous data. |
||||
- if (!buffer.initialize(size(), m_premultiplyAlpha)) |
||||
- return false; |
||||
- } else { |
||||
- const ImageFrame& prevBuffer = m_frameBufferCache[frameIndex - 1]; |
||||
- ASSERT(prevBuffer.isComplete()); |
||||
- |
||||
- // Preserve the last frame as the starting state for this frame. |
||||
- if (!prevBuffer.backingStore() || !buffer.initialize(*prevBuffer.backingStore())) |
||||
- return false; |
||||
- |
||||
- if (prevBuffer.disposalMethod() == ImageFrame::DisposalMethod::RestoreToBackground) { |
||||
- // We want to clear the previous frame to transparent, without |
||||
- // affecting pixels in the image outside of the frame. |
||||
- const IntRect& prevRect = prevBuffer.backingStore()->frameRect(); |
||||
- buffer.backingStore()->clearRect(prevRect); |
||||
- } |
||||
- } |
||||
- |
||||
- buffer.setHasAlpha(webpFrame->has_alpha); |
||||
- buffer.backingStore()->setFrameRect(frameRect); |
||||
- |
||||
- return true; |
||||
-} |
||||
- |
||||
-void WEBPImageDecoder::applyPostProcessing(size_t frameIndex, WebPIDecoder* decoder, WebPDecBuffer& decoderBuffer, bool blend) |
||||
-{ |
||||
- ImageFrame& buffer = m_frameBufferCache[frameIndex]; |
||||
- int decodedWidth = 0; |
||||
- int decodedHeight = 0; |
||||
- if (!WebPIDecGetRGB(decoder, &decodedHeight, &decodedWidth, 0, 0)) |
||||
- return; // See also https://bugs.webkit.org/show_bug.cgi?id=74062 |
||||
- if (decodedHeight <= 0) |
||||
- return; |
||||
- |
||||
- const IntRect& frameRect = buffer.backingStore()->frameRect(); |
||||
- ASSERT_WITH_SECURITY_IMPLICATION(decodedWidth == frameRect.width()); |
||||
- ASSERT_WITH_SECURITY_IMPLICATION(decodedHeight <= frameRect.height()); |
||||
- const int left = frameRect.x(); |
||||
- const int top = frameRect.y(); |
||||
- |
||||
- for (int y = 0; y < decodedHeight; y++) { |
||||
- const int canvasY = top + y; |
||||
- for (int x = 0; x < decodedWidth; x++) { |
||||
- const int canvasX = left + x; |
||||
- RGBA32* address = buffer.backingStore()->pixelAt(canvasX, canvasY); |
||||
- uint8_t* pixel = decoderBuffer.u.RGBA.rgba + (y * frameRect.width() + x) * sizeof(RGBA32); |
||||
- if (blend && (pixel[3] < 255)) |
||||
- buffer.backingStore()->blendPixel(address, pixel[0], pixel[1], pixel[2], pixel[3]); |
||||
- else |
||||
- buffer.backingStore()->setPixel(address, pixel[0], pixel[1], pixel[2], pixel[3]); |
||||
- } |
||||
- } |
||||
-} |
||||
- |
||||
-void WEBPImageDecoder::parseHeader() |
||||
-{ |
||||
- if (m_headerParsed) |
||||
- return; |
||||
- |
||||
- m_headerParsed = true; |
||||
- |
||||
- const unsigned webpHeaderSize = 30; // RIFF_HEADER_SIZE + CHUNK_HEADER_SIZE + VP8_FRAME_HEADER_SIZE |
||||
- if (m_data->size() < webpHeaderSize) |
||||
- return; // Await VP8X header so WebPDemuxPartial succeeds. |
||||
- |
||||
- WebPData inputData = { reinterpret_cast<const uint8_t*>(m_data->data()), m_data->size() }; |
||||
- WebPDemuxState demuxerState; |
||||
- WebPDemuxer* demuxer = WebPDemuxPartial(&inputData, &demuxerState); |
||||
- if (!demuxer) { |
||||
- setFailed(); |
||||
- return; |
||||
- } |
||||
- |
||||
- m_frameCount = WebPDemuxGetI(demuxer, WEBP_FF_FRAME_COUNT); |
||||
- if (!m_frameCount) { |
||||
- WebPDemuxDelete(demuxer); |
||||
- return; // Wait until the encoded image frame data arrives. |
||||
- } |
||||
- |
||||
- int width = WebPDemuxGetI(demuxer, WEBP_FF_CANVAS_WIDTH); |
||||
- int height = WebPDemuxGetI(demuxer, WEBP_FF_CANVAS_HEIGHT); |
||||
- if (!isSizeAvailable() && !setSize(IntSize(width, height))) { |
||||
- WebPDemuxDelete(demuxer); |
||||
- return; |
||||
- } |
||||
- |
||||
- m_formatFlags = WebPDemuxGetI(demuxer, WEBP_FF_FORMAT_FLAGS); |
||||
- if (!(m_formatFlags & ANIMATION_FLAG)) |
||||
- m_repetitionCount = WebCore::RepetitionCountNone; |
||||
- else { |
||||
- // Since we have parsed at least one frame, even if partially, |
||||
- // the global animation (ANIM) properties have been read since |
||||
- // an ANIM chunk must precede the ANMF frame chunks. |
||||
- m_repetitionCount = WebPDemuxGetI(demuxer, WEBP_FF_LOOP_COUNT); |
||||
- ASSERT(m_repetitionCount == (m_repetitionCount & 0xffff)); // Loop count is always <= 16 bits. |
||||
- if (!m_repetitionCount) |
||||
- m_repetitionCount = WebCore::RepetitionCountInfinite; |
||||
- } |
||||
- |
||||
- WebPDemuxDelete(demuxer); |
||||
-} |
||||
- |
||||
-void WEBPImageDecoder::clearFrameBufferCache(size_t clearBeforeFrame) |
||||
-{ |
||||
- if (m_frameBufferCache.isEmpty()) |
||||
- return; |
||||
- |
||||
- // We don't want to delete the last frame in the cache, as is may be needed for |
||||
- // decoding when new data arrives. See GIFImageDecoder for the full explanation. |
||||
- clearBeforeFrame = std::min(clearBeforeFrame, m_frameBufferCache.size() - 1); |
||||
- |
||||
- // Also from GIFImageDecoder: We need to preserve frames such that: |
||||
- // * We don't clear |clearBeforeFrame|. |
||||
- // * We don't clear the frame we're currently decoding. |
||||
- // * We don't clear any frame from which a future initFrameBuffer() call will copy bitmap data. |
||||
- // |
||||
- // In WEBP every frame depends on the previous one or none. That means that frames after clearBeforeFrame |
||||
- // won't need any frame before them to render, so we can clear them all. |
||||
- for (int i = clearBeforeFrame - 1; i >= 0; i--) { |
||||
- ImageFrame& buffer = m_frameBufferCache[i]; |
||||
- if (!buffer.isInvalid()) |
||||
- buffer.clear(); |
||||
+ default: |
||||
+ clear(); |
||||
+ return setFailed(); |
||||
} |
||||
} |
||||
|
||||
diff -up webkitgtk-2.20.2/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h.no_webp_demux webkitgtk-2.20.2/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h |
||||
--- webkitgtk-2.20.2/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h.no_webp_demux 2018-02-19 08:45:32.000000000 +0100 |
||||
+++ webkitgtk-2.20.2/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h 2018-05-11 08:36:41.029235210 +0200 |
||||
@@ -33,7 +33,6 @@ |
||||
#if USE(WEBP) |
||||
|
||||
#include "webp/decode.h" |
||||
-#include "webp/demux.h" |
||||
|
||||
namespace WebCore { |
||||
|
||||
@@ -47,26 +46,19 @@ public: |
||||
virtual ~WEBPImageDecoder(); |
||||
|
||||
String filenameExtension() const override { return ASCIILiteral("webp"); } |
||||
- void setData(SharedBuffer&, bool) final; |
||||
ImageFrame* frameBufferAtIndex(size_t index) override; |
||||
- RepetitionCount repetitionCount() const override; |
||||
- size_t frameCount() const override { return m_frameCount; } |
||||
- void clearFrameBufferCache(size_t) override; |
||||
|
||||
private: |
||||
WEBPImageDecoder(AlphaOption, GammaAndColorProfileOption); |
||||
- void tryDecodeSize(bool) override { parseHeader(); } |
||||
- void decode(size_t, bool); |
||||
- void decodeFrame(size_t, WebPDemuxer*); |
||||
- void parseHeader(); |
||||
- bool initFrameBuffer(size_t, const WebPIterator*); |
||||
- void applyPostProcessing(size_t, WebPIDecoder*, WebPDecBuffer&, bool); |
||||
- size_t findFirstRequiredFrameToDecode(size_t, WebPDemuxer*); |
||||
- |
||||
- int m_repetitionCount { 0 }; |
||||
- size_t m_frameCount { 0 }; |
||||
- int m_formatFlags { 0 }; |
||||
- bool m_headerParsed { false }; |
||||
+ void tryDecodeSize(bool allDataReceived) override { decode(true, allDataReceived); } |
||||
+ |
||||
+ bool decode(bool onlySize, bool allDataReceived); |
||||
+ |
||||
+ WebPIDecoder* m_decoder; |
||||
+ bool m_hasAlpha; |
||||
+ |
||||
+ void applyColorProfile(const uint8_t*, size_t, ImageFrame&) { }; |
||||
+ void clear(); |
||||
}; |
||||
|
||||
} // namespace WebCore |
@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
|
||||
diff --git a/Source/JavaScriptCore/heap/MarkedBlock.h b/Source/JavaScriptCore/heap/MarkedBlock.h |
||||
index 7d14eecfd8d..95ea41c04dd 100644 |
||||
--- a/Source/JavaScriptCore/heap/MarkedBlock.h |
||||
+++ b/Source/JavaScriptCore/heap/MarkedBlock.h |
||||
@@ -66,7 +66,12 @@ private: |
||||
friend class Handle; |
||||
public: |
||||
static constexpr size_t atomSize = 16; // bytes |
||||
+ |
||||
+#if CPU(PPC64) || CPU(PPC64LE) || CPU(PPC) || CPU(ARM64) || CPU(UNKNOWN) |
||||
+ static constexpr size_t blockSize = 64 * KB; |
||||
+#else |
||||
static constexpr size_t blockSize = 16 * KB; |
||||
+#endif |
||||
static constexpr size_t blockMask = ~(blockSize - 1); // blockSize must be a power of two. |
||||
|
||||
static constexpr size_t atomsPerBlock = blockSize / atomSize; |
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,111 @@
@@ -0,0 +1,111 @@
|
||||
From aacbb7501a1c9b16a73211a8a67ff5b028e92988 Mon Sep 17 00:00:00 2001 |
||||
From: "mcatanzaro@igalia.com" |
||||
<mcatanzaro@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc> |
||||
Date: Tue, 14 Nov 2017 00:42:20 +0000 |
||||
Subject: [PATCH] [GTK] Require woff2 1.0.2 and drop direct brotli dependency |
||||
https://bugs.webkit.org/show_bug.cgi?id=179630 |
||||
MIME-Version: 1.0 |
||||
Content-Type: text/plain; charset=UTF-8 |
||||
Content-Transfer-Encoding: 8bit |
||||
|
||||
Reviewed by Frédéric Wang. |
||||
|
||||
.: |
||||
|
||||
* Source/cmake/FindBrotliDec.cmake: Removed. |
||||
* Source/cmake/OptionsGTK.cmake: |
||||
|
||||
Tools: |
||||
|
||||
* gtk/jhbuild.modules: |
||||
|
||||
|
||||
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@224793 268f45cc-cd09-0410-ab3c-d52691b4dbfc |
||||
--- |
||||
ChangeLog | 10 ++++++++ |
||||
Source/cmake/FindBrotliDec.cmake | 53 ---------------------------------------- |
||||
Source/cmake/OptionsGTK.cmake | 6 +---- |
||||
Tools/ChangeLog | 9 +++++++ |
||||
Tools/gtk/jhbuild.modules | 2 +- |
||||
5 files changed, 21 insertions(+), 59 deletions(-) |
||||
delete mode 100644 Source/cmake/FindBrotliDec.cmake |
||||
|
||||
diff --git a/Source/cmake/FindBrotliDec.cmake b/Source/cmake/FindBrotliDec.cmake |
||||
deleted file mode 100644 |
||||
index 3a8cf90357f..00000000000 |
||||
--- a/Source/cmake/FindBrotliDec.cmake |
||||
+++ /dev/null |
||||
@@ -1,53 +0,0 @@ |
||||
-# - Try to find BrotliDec. |
||||
-# Once done, this will define |
||||
-# |
||||
-# BROTLIDEC_FOUND - system has BrotliDec. |
||||
-# BROTLIDEC_INCLUDE_DIRS - the BrotliDec include directories |
||||
-# BROTLIDEC_LIBRARIES - link these to use BrotliDec. |
||||
-# |
||||
-# Copyright (C) 2017 Igalia S.L. |
||||
-# |
||||
-# Redistribution and use in source and binary forms, with or without |
||||
-# modification, are permitted provided that the following conditions |
||||
-# are met: |
||||
-# 1. Redistributions of source code must retain the above copyright |
||||
-# notice, this list of conditions and the following disclaimer. |
||||
-# 2. Redistributions in binary form must reproduce the above copyright |
||||
-# notice, this list of conditions and the following disclaimer in the |
||||
-# documentation and/or other materials provided with the distribution. |
||||
-# |
||||
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS |
||||
-# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
||||
-# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
||||
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS |
||||
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
||||
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
||||
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
||||
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
||||
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
||||
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
||||
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
- |
||||
-find_package(PkgConfig) |
||||
-pkg_check_modules(PC_BROTLIDEC libbrotlidec) |
||||
- |
||||
-find_path(BROTLIDEC_INCLUDE_DIRS |
||||
- NAMES brotli/decode.h |
||||
- HINTS ${PC_BROTLIDEC_INCLUDEDIR} |
||||
-) |
||||
- |
||||
-find_library(BROTLIDEC_LIBRARIES |
||||
- NAMES brotlidec |
||||
- HINTS ${PC_BROTLIDEC_LIBDIR} |
||||
-) |
||||
- |
||||
-include(FindPackageHandleStandardArgs) |
||||
-find_package_handle_standard_args(BrotliDec |
||||
- REQUIRED_VARS BROTLIDEC_INCLUDE_DIRS BROTLIDEC_LIBRARIES |
||||
- FOUND_VAR BROTLIDEC_FOUND |
||||
- VERSION_VAR PC_BROTLIDEC_VERSION) |
||||
- |
||||
-mark_as_advanced( |
||||
- BROTLIDEC_INCLUDE_DIRS |
||||
- BROTLIDEC_LIBRARIES |
||||
-) |
||||
diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake |
||||
index ba7e134c7cc..39c3a9be47e 100644 |
||||
--- a/Source/cmake/OptionsGTK.cmake |
||||
+++ b/Source/cmake/OptionsGTK.cmake |
||||
@@ -365,11 +365,7 @@ if (USE_UPOWER) |
||||
endif () |
||||
|
||||
if (USE_WOFF2) |
||||
- find_package(BrotliDec 1.0.1) |
||||
- if (NOT BROTLIDEC_FOUND) |
||||
- message(FATAL_ERROR "libbrotlidec is needed for USE_WOFF2.") |
||||
- endif () |
||||
- find_package(WOFF2Dec 1.0.1) |
||||
+ find_package(WOFF2Dec 1.0.2) |
||||
if (NOT WOFF2DEC_FOUND) |
||||
message(FATAL_ERROR "libwoff2dec is needed for USE_WOFF2.") |
||||
endif () |
||||
-- |
||||
2.16.2 |
||||
|
@ -0,0 +1,618 @@
@@ -0,0 +1,618 @@
|
||||
## NOTE: Lots of files in various subdirectories have the same name (such as |
||||
## "LICENSE") so this short macro allows us to distinguish them by using their |
||||
## directory names (from the source tree) as prefixes for the files. |
||||
%global add_to_license_files() \ |
||||
mkdir -p _license_files ; \ |
||||
cp -p %1 _license_files/$(echo '%1' | sed -e 's!/!.!g') |
||||
|
||||
# Bundle ICU 57 - see https://bugzilla.redhat.com/show_bug.cgi?id=1414413 |
||||
%define bundle_icu 1 |
||||
%if 0%{?bundle_icu} |
||||
# Filter out provides/requires for private libraries |
||||
%global __provides_exclude %{?__provides_exclude:%__provides_exclude|}libicu.* |
||||
%global __requires_exclude %{?__requires_exclude:%__requires_exclude|}libicu.* |
||||
%global __provides_exclude_from ^%{_libdir}/webkit2gtk-4\\.0/.*\\.so$ |
||||
%endif |
||||
|
||||
# Increase the DIE limit so our debuginfo packages could be size optimized. |
||||
# Fedora bug - https://bugzilla.redhat.com/show_bug.cgi?id=1456261 |
||||
%global _dwz_max_die_limit 250000000 |
||||
# The _dwz_max_die_limit is being overridden by the arch specific ones from the |
||||
# redhat-rpm-config so we need to set the arch specific ones as well - now it |
||||
# is only needed for x86_64. |
||||
%global _dwz_max_die_limit_x86_64 250000000 |
||||
|
||||
# As we are using the DTS we have to build this package as: |
||||
# rhpkg build --target rhel-7.6-devtoolset-7-candidate |
||||
|
||||
Name: webkitgtk4 |
||||
Version: 2.20.5 |
||||
Release: 1%{?dist} |
||||
Summary: GTK+ Web content engine library |
||||
|
||||
License: LGPLv2 |
||||
URL: http://www.webkitgtk.org |
||||
Source0: http://webkitgtk.org/releases/webkitgtk-%{version}.tar.xz |
||||
%if 0%{?bundle_icu} |
||||
Source1: http://download.icu-project.org/files/icu4c/57.1/icu4c-57_1-src.tgz |
||||
%endif |
||||
|
||||
|
||||
# https://bugs.webkit.org/show_bug.cgi?id=132333 |
||||
Patch0: webkit-cloop_big_endians.patch |
||||
# Silly workaround for |
||||
# https://bugs.webkit.org/show_bug.cgi?id=182923 |
||||
Patch1: webkit-page_size.patch |
||||
# Revert woff2 and brotli removal to bundle them again, as they are not |
||||
# included in RHEL 7 |
||||
# https://bugs.webkit.org/show_bug.cgi?id=179630 |
||||
Patch2: webkit-woff2_1.0.2.patch |
||||
# https://trac.webkit.org/changeset/224329 |
||||
Patch3: webkit-library_typos.patch |
||||
# https://bugs.webkit.org/show_bug.cgi?id=177862 |
||||
Patch4: webkit-remove_woff2.patch |
||||
# https://bugs.webkit.org/show_bug.cgi?id=177804 |
||||
Patch5: webkit-remove_brotli.patch |
||||
# We don't have new enough version of libgcrypt to support Subtle Crypto, lower |
||||
# the version in the check so configure can pass and also disable Subtle Crypto |
||||
# through cmake argument. |
||||
Patch6: webkit-lower_libgcrypt_version.patch |
||||
# We don't have new enough version of libwebp (that has demux) to support the |
||||
# animated WebP images - revert the change that introduced it. |
||||
Patch7: webkit-no_webp_demux.patch |
||||
Patch8: webkit-memset_zero_length.patch |
||||
Patch9: webkit-covscan_already_fixed.patch |
||||
Patch10: webkit-covscan_uninit_ctor.patch |
||||
Patch11: webkit-covscan_uninit.patch |
||||
# https://bugs.webkit.org/show_bug.cgi?id=186756 |
||||
Patch12: webkit-covscan_1.patch |
||||
# https://bugs.webkit.org/show_bug.cgi?id=186757 |
||||
Patch13: webkit-covscan_2.patch |
||||
Patch14: webkit-covscan_3.patch |
||||
# https://bugs.webkit.org/show_bug.cgi?id=186758 |
||||
Patch15: webkit-covscan_va_close.patch |
||||
# https://bugs.webkit.org/show_bug.cgi?id=186763 |
||||
Patch16: webkit-covscan_bmalloc.patch |
||||
# https://bugs.webkit.org/show_bug.cgi?id=186800 |
||||
Patch17: webkit-covscan_wtf.patch |
||||
# https://bugs.webkit.org/show_bug.cgi?id=187087 |
||||
Patch18: webkit-covscan_gstreamer.patch |
||||
# For QA tests |
||||
Patch19: webkit-minibrowser-labels.patch |
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1591638 |
||||
Patch20: webkit-atk_crash.patch |
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1503624 |
||||
Patch21: webkit-atk_continuation_crash.patch |
||||
|
||||
|
||||
%if 0%{?bundle_icu} |
||||
Patch50: icu-8198.revert.icu5431.patch |
||||
Patch51: icu-8800.freeserif.crash.patch |
||||
Patch52: icu-7601.Indic-ccmp.patch |
||||
Patch53: icu-gennorm2-man.patch |
||||
Patch54: icu-icuinfo-man.patch |
||||
Patch55: icu-armv7hl-disable-tests.patch |
||||
Patch56: icu-rhbz1360340-icu-changeset-39109.patch |
||||
Patch57: icu-diff-icu_trunk_source_common_locid.cpp-from-39282-to-39384.patch |
||||
Patch58: icu-dont_use_clang_even_if_installed.patch |
||||
# CVE-2017-7867 CVE-2017-7868 |
||||
Patch59: icu-rhbz1444101-icu-changeset-39671.patch |
||||
%endif |
||||
|
||||
BuildRequires: at-spi2-core-devel |
||||
BuildRequires: bison |
||||
BuildRequires: cairo-devel |
||||
BuildRequires: enchant-devel |
||||
BuildRequires: flex |
||||
BuildRequires: fontconfig-devel |
||||
BuildRequires: freetype-devel |
||||
BuildRequires: geoclue2-devel |
||||
BuildRequires: gettext |
||||
BuildRequires: glib2-devel |
||||
BuildRequires: gobject-introspection-devel |
||||
BuildRequires: gperf |
||||
BuildRequires: gstreamer1-devel |
||||
BuildRequires: gstreamer1-plugins-base-devel |
||||
BuildRequires: gstreamer1-plugins-bad-free-devel |
||||
BuildRequires: gtk2-devel |
||||
BuildRequires: gtk3-devel |
||||
BuildRequires: gtk-doc >= 1.25 |
||||
BuildRequires: harfbuzz-devel |
||||
%if ! 0%{?bundle_icu} |
||||
BuildRequires: libicu-devel |
||||
%endif |
||||
BuildRequires: libjpeg-devel |
||||
BuildRequires: libnotify-devel |
||||
BuildRequires: libpng-devel |
||||
BuildRequires: libsecret-devel |
||||
BuildRequires: libsoup-devel >= 2.56 |
||||
BuildRequires: libwebp-devel |
||||
BuildRequires: libxslt-devel |
||||
BuildRequires: libXt-devel |
||||
BuildRequires: libwayland-client-devel |
||||
BuildRequires: libwayland-egl-devel |
||||
BuildRequires: libwayland-server-devel |
||||
BuildRequires: mesa-libEGL-devel |
||||
BuildRequires: mesa-libGL-devel |
||||
BuildRequires: mesa-libGLES-devel |
||||
BuildRequires: pcre-devel |
||||
BuildRequires: perl-Switch |
||||
BuildRequires: perl-JSON-PP |
||||
BuildRequires: ruby |
||||
BuildRequires: rubygems |
||||
BuildRequires: sqlite-devel |
||||
BuildRequires: hyphen-devel |
||||
BuildRequires: gnutls-devel |
||||
%if 0%{?rhel} == 7 |
||||
BuildRequires: devtoolset-7-gcc |
||||
BuildRequires: devtoolset-7-gcc-c++ |
||||
BuildRequires: devtoolset-7-build |
||||
BuildRequires: devtoolset-7-libatomic-devel |
||||
BuildRequires: llvm-toolset-7-cmake |
||||
%else |
||||
BuildRequires: libatomic |
||||
BuildRequires: cmake |
||||
%endif |
||||
|
||||
Requires: geoclue2 |
||||
|
||||
%if 0%{?bundle_icu} |
||||
BuildRequires: doxygen |
||||
BuildRequires: autoconf |
||||
BuildRequires: python |
||||
%endif |
||||
|
||||
# Obsolete libwebkit2gtk from the webkitgtk3 package |
||||
Obsoletes: libwebkit2gtk < 2.5.0 |
||||
Provides: libwebkit2gtk = %{version}-%{release} |
||||
|
||||
# We're supposed to specify versions here, but these Google libs don't do |
||||
# normal releases. Accordingly, they're not suitable to be system libs. |
||||
# Provides: bundled(angle) |
||||
# Provides: bundled(brotli) |
||||
# Provides: bundled(woff2) |
||||
|
||||
# Require the jsc subpackage |
||||
Requires: %{name}-jsc%{?_isa} = %{version}-%{release} |
||||
|
||||
# Require the support for the GTK+ 2 based NPAPI plugins |
||||
# Would be nice to recommend as in Fedora, but RHEL7 RPM doesn't support it. |
||||
Requires: %{name}-plugin-process-gtk2%{?_isa} = %{version}-%{release} |
||||
|
||||
%description |
||||
WebKitGTK+ is the port of the portable web rendering engine WebKit to the |
||||
GTK+ platform. |
||||
|
||||
This package contains WebKitGTK+ for GTK+ 3. |
||||
|
||||
%package devel |
||||
Summary: Development files for %{name} |
||||
Requires: %{name}%{?_isa} = %{version}-%{release} |
||||
Requires: %{name}-jsc%{?_isa} = %{version}-%{release} |
||||
Requires: %{name}-jsc-devel%{?_isa} = %{version}-%{release} |
||||
|
||||
%description devel |
||||
The %{name}-devel package contains libraries, build data, and header |
||||
files for developing applications that use %{name}. |
||||
|
||||
%package doc |
||||
Summary: Documentation files for %{name} |
||||
BuildArch: noarch |
||||
Requires: %{name} = %{version}-%{release} |
||||
|
||||
%description doc |
||||
This package contains developer documentation for %{name}. |
||||
|
||||
%package jsc |
||||
Summary: JavaScript engine from %{name} |
||||
Requires: %{name} = %{version}-%{release} |
||||
|
||||
%description jsc |
||||
This package contains JavaScript engine from %{name}. |
||||
|
||||
%package jsc-devel |
||||
Summary: Development files for JavaScript engine from %{name} |
||||
Requires: %{name}-jsc%{?_isa} = %{version}-%{release} |
||||
Requires: %{name} = %{version}-%{release} |
||||
|
||||
%description jsc-devel |
||||
The %{name}-jsc-devel package contains libraries, build data, and header |
||||
files for developing applications that use JavaScript engine from %{name}. |
||||
|
||||
%package plugin-process-gtk2 |
||||
Summary: GTK+ 2 based NPAPI plugins support for %{name} |
||||
Requires: %{name}-jsc%{?_isa} = %{version}-%{release} |
||||
Requires: %{name} = %{version}-%{release} |
||||
|
||||
%description plugin-process-gtk2 |
||||
Support for the GTK+ 2 based NPAPI plugins (such as Adobe Flash) for %{name}. |
||||
|
||||
%prep |
||||
%if 0%{?bundle_icu} |
||||
%setup -q -T -n icu -b 1 |
||||
%patch50 -p2 -R -b .icu8198.revert.icu5431.patch |
||||
%patch51 -p1 -b .icu8800.freeserif.crash.patch |
||||
%patch52 -p1 -b .icu7601.Indic-ccmp.patch |
||||
%patch53 -p1 -b .gennorm2-man.patch |
||||
%patch54 -p1 -b .icuinfo-man.patch |
||||
%ifarch armv7hl |
||||
%patch55 -p1 -b .armv7hl-disable-tests.patch |
||||
%endif |
||||
%patch56 -p1 -b .rhbz1360340-icu-changeset-39109.patch |
||||
%patch57 -p1 -b .diff-icu_trunk_source_common_locid.cpp-from-39282-to-39384.patch |
||||
%patch58 -p1 -b .dont_use_clang_even_if_installed |
||||
%patch59 -p1 -b .rhbz1444101-icu-changeset-39671.patch |
||||
|
||||
%setup -q -T -n webkitgtk-%{version} -b 0 |
||||
%patch0 -p1 -b .cloop_big_endians |
||||
%patch1 -p1 -b .page_size |
||||
%patch2 -R -p1 -b .woff2_1.0.2 |
||||
%patch3 -R -p1 -b .library_typos |
||||
%patch4 -p1 -b .remove_woff2 |
||||
%patch5 -p1 -b .remove_brotli |
||||
%patch6 -p1 -b .lower_libgcrypt_version |
||||
%patch7 -p1 -b .no_webp_demux |
||||
%patch8 -p1 -b .memset_zero_length |
||||
%patch9 -p1 -b .covscan_already_fixed |
||||
%patch10 -p1 -b .covscan_uninit_ctor |
||||
%patch11 -p1 -b .covscan_uninit |
||||
%patch12 -p1 -b .covscan_1 |
||||
%patch13 -p1 -b .covscan_2 |
||||
%patch14 -p1 -b .covscan_3 |
||||
%patch15 -p1 -b .covscan_va_close |
||||
%patch16 -p1 -b .covscan_bmalloc |
||||
%patch17 -p1 -b .covscan_wtf |
||||
%patch18 -p1 -b .covscan_gstreamer |
||||
%patch19 -p1 -b .minibrowser_labels |
||||
%patch20 -p1 -b .atk_crash |
||||
%patch21 -p1 -b .atk_continuation_crash |
||||
%else |
||||
%autosetup -p1 -n webkitgtk-%{version} |
||||
%endif |
||||
|
||||
# Remove bundled libraries |
||||
rm -rf Source/ThirdParty/gtest/ |
||||
rm -rf Source/ThirdParty/qunit/ |
||||
|
||||
%build |
||||
%ifarch s390 aarch64 |
||||
# Use linker flags to reduce memory consumption - on other arches the ld.gold is |
||||
# used and also it doesn't have the --reduce-memory-overheads option |
||||
%global optflags %{optflags} -Wl,--no-keep-memory -Wl,--reduce-memory-overheads |
||||
%endif |
||||
|
||||
# Decrease debuginfo even on ix86 because of: |
||||
# https://bugs.webkit.org/show_bug.cgi?id=140176 |
||||
%ifarch s390 s390x %{arm} %{ix86} ppc %{power64} %{mips} |
||||
# Decrease debuginfo verbosity to reduce memory consumption even more |
||||
%global optflags %(echo %{optflags} | sed 's/-g /-g1 /') |
||||
%endif |
||||
|
||||
%ifarch ppc |
||||
# Use linker flag -relax to get WebKit build under ppc(32) with JIT disabled |
||||
%global optflags %{optflags} -Wl,-relax |
||||
%endif |
||||
|
||||
%if 0%{?bundle_icu} |
||||
pushd ../icu/source |
||||
autoconf |
||||
CFLAGS='%optflags -fno-strict-aliasing' |
||||
CXXFLAGS='%optflags -fno-strict-aliasing' |
||||
%{!?endian: %global endian %(%{__python} -c "import sys;print (0 if sys.byteorder=='big' else 1)")} |
||||
# " this line just fixes syntax highlighting for vim that is confused by the above and continues literal |
||||
# Endian: BE=0 LE=1 |
||||
%if ! 0%{?endian} |
||||
CPPFLAGS='-DU_IS_BIG_ENDIAN=1' |
||||
%endif |
||||
|
||||
#rhbz856594 do not use --disable-renaming or cope with the mess |
||||
OPTIONS='--with-data-packaging=library --disable-samples' |
||||
%configure $OPTIONS |
||||
|
||||
#rhbz#225896 |
||||
sed -i 's|-nodefaultlibs -nostdlib||' config/mh-linux |
||||
#rhbz#681941 |
||||
sed -i 's|^LIBS =.*|LIBS = -L../lib -licuuc -lpthread -lm|' i18n/Makefile |
||||
sed -i 's|^LIBS =.*|LIBS = -nostdlib -L../lib -licuuc -licui18n -lc -lgcc|' io/Makefile |
||||
sed -i 's|^LIBS =.*|LIBS = -nostdlib -L../lib -licuuc -lc|' layout/Makefile |
||||
sed -i 's|^LIBS =.*|LIBS = -nostdlib -L../lib -licuuc -licule -lc|' layoutex/Makefile |
||||
sed -i 's|^LIBS =.*|LIBS = -nostdlib -L../../lib -licutu -licuuc -lc|' tools/ctestfw/Makefile |
||||
# As of ICU 52.1 the -nostdlib in tools/toolutil/Makefile results in undefined reference to `__dso_handle' |
||||
sed -i 's|^LIBS =.*|LIBS = -L../../lib -licui18n -licuuc -lpthread -lc|' tools/toolutil/Makefile |
||||
#rhbz#813484 |
||||
sed -i 's| \$(docfilesdir)/installdox||' Makefile |
||||
# There is no source/doc/html/search/ directory |
||||
sed -i '/^\s\+\$(INSTALL_DATA) \$(docsrchfiles) \$(DESTDIR)\$(docdir)\/\$(docsubsrchdir)\s*$/d' Makefile |
||||
# rhbz#856594 The configure --disable-renaming and possibly other options |
||||
# result in icu/source/uconfig.h.prepend being created, include that content in |
||||
# icu/source/common/unicode/uconfig.h to propagate to consumer packages. |
||||
test -f uconfig.h.prepend && sed -e '/^#define __UCONFIG_H__/ r uconfig.h.prepend' -i common/unicode/uconfig.h |
||||
|
||||
# more verbosity for build.log |
||||
sed -i -r 's|(PKGDATA_OPTS = )|\1-v |' data/Makefile |
||||
|
||||
make %{?_smp_mflags} VERBOSE=1 |
||||
cd .. |
||||
BUNDLED_ICU_PATH="`pwd`/icu_installed" |
||||
make %{?_smp_mflags} -C source install DESTDIR=$BUNDLED_ICU_PATH |
||||
popd |
||||
%endif |
||||
|
||||
# Enable DTS |
||||
%if 0%{?rhel} == 7 |
||||
source /opt/rh/devtoolset-7/enable |
||||
source /opt/rh/llvm-toolset-7/enable |
||||
%define __cmake /opt/rh/llvm-toolset-7/root/usr/bin/cmake |
||||
%endif |
||||
|
||||
# Disable ld.gold on s390 as it does not have it. |
||||
# Also for aarch64 as the support is in upstream, but not packaged in Fedora. |
||||
# Disable subtle crypto as we have an old libgcrypt in RHEL 7 |
||||
mkdir -p %{_target_platform} |
||||
pushd %{_target_platform} |
||||
%cmake \ |
||||
-DPORT=GTK \ |
||||
-DCMAKE_BUILD_TYPE=Release \ |
||||
%if 0%{bundle_icu} |
||||
-DICU_DATA_LIBRARY=$BUNDLED_ICU_PATH/%{_libdir}/libicudata.so \ |
||||
-DICU_I18N_LIBRARY=$BUNDLED_ICU_PATH/%{_libdir}/libicui18n.so \ |
||||
-DICU_INCLUDE_DIR=$BUNDLED_ICU_PATH/%{_includedir} \ |
||||
-DICU_LIBRARY=$BUNDLED_ICU_PATH/%{_libdir}/libicuuc.so \ |
||||
-DCMAKE_INSTALL_RPATH=%{_libdir}/webkit2gtk-4.0 \ |
||||
%endif |
||||
-DENABLE_GTKDOC=ON \ |
||||
-DENABLE_MINIBROWSER=ON \ |
||||
-DENABLE_SUBTLE_CRYPTO=OFF \ |
||||
%ifarch s390 aarch64 |
||||
-DUSE_LD_GOLD=OFF \ |
||||
%endif |
||||
%ifarch s390 s390x ppc %{power64} aarch64 %{mips} |
||||
-DENABLE_JIT=OFF \ |
||||
-DUSE_SYSTEM_MALLOC=ON \ |
||||
%endif |
||||
.. |
||||
popd |
||||
|
||||
# Remove the static amount of jobs once |
||||
# https://projects.engineering.redhat.com/browse/BREW-2146 is resolved |
||||
# make %{?_smp_mflags} -C %{_target_platform} |
||||
make -j4 -C %{_target_platform} |
||||
|
||||
%install |
||||
%if 0%{?bundle_icu} |
||||
pushd ../icu/icu_installed/%{_libdir} |
||||
mkdir -p $RPM_BUILD_ROOT%{_libdir}/webkit2gtk-4.0/ |
||||
cp -a libicudata.so.* $RPM_BUILD_ROOT%{_libdir}/webkit2gtk-4.0/ |
||||
cp -a libicui18n.so.* $RPM_BUILD_ROOT%{_libdir}/webkit2gtk-4.0/ |
||||
cp -a libicuuc.so.* $RPM_BUILD_ROOT%{_libdir}/webkit2gtk-4.0/ |
||||
popd |
||||
# We don't want debuginfo generated for the bundled icu libraries. |
||||
# Turn off execute bit so they aren't included in the debuginfo.list. |
||||
# We'll turn the execute bit on again in %%files. |
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1486771 |
||||
chmod 644 $RPM_BUILD_ROOT%{_libdir}/webkit2gtk-4.0/libicudata.so.57.1 |
||||
chmod 644 $RPM_BUILD_ROOT%{_libdir}/webkit2gtk-4.0/libicui18n.so.57.1 |
||||
chmod 644 $RPM_BUILD_ROOT%{_libdir}/webkit2gtk-4.0/libicuuc.so.57.1 |
||||
%endif |
||||
|
||||
%make_install %{?_smp_mflags} -C %{_target_platform} |
||||
|
||||
%find_lang WebKit2GTK-4.0 |
||||
|
||||
# Finally, copy over and rename various files for %%license inclusion |
||||
%add_to_license_files Source/JavaScriptCore/COPYING.LIB |
||||
%add_to_license_files Source/JavaScriptCore/icu/LICENSE |
||||
%add_to_license_files Source/ThirdParty/ANGLE/LICENSE |
||||
%add_to_license_files Source/ThirdParty/ANGLE/src/common/third_party/smhasher/LICENSE |
||||
%add_to_license_files Source/ThirdParty/ANGLE/src/third_party/compiler/LICENSE |
||||
%add_to_license_files Source/ThirdParty/ANGLE/src/third_party/libXNVCtrl/LICENSE |
||||
%add_to_license_files Source/ThirdParty/brotli/LICENSE |
||||
%add_to_license_files Source/ThirdParty/woff2/LICENSE |
||||
%add_to_license_files Source/WebCore/icu/LICENSE |
||||
%add_to_license_files Source/WebCore/LICENSE-APPLE |
||||
%add_to_license_files Source/WebCore/LICENSE-LGPL-2 |
||||
%add_to_license_files Source/WebCore/LICENSE-LGPL-2.1 |
||||
%add_to_license_files Source/WebInspectorUI/UserInterface/External/CodeMirror/LICENSE |
||||
%add_to_license_files Source/WebInspectorUI/UserInterface/External/ESLint/LICENSE |
||||
%add_to_license_files Source/WebInspectorUI/UserInterface/External/Esprima/LICENSE |
||||
%add_to_license_files Source/WebInspectorUI/UserInterface/External/three.js/LICENSE |
||||
%add_to_license_files Source/WTF/icu/LICENSE |
||||
%add_to_license_files Source/WTF/wtf/dtoa/COPYING |
||||
%add_to_license_files Source/WTF/wtf/dtoa/LICENSE |
||||
|
||||
%post -p /sbin/ldconfig |
||||
%postun -p /sbin/ldconfig |
||||
%post jsc -p /sbin/ldconfig |
||||
%postun jsc -p /sbin/ldconfig |
||||
|
||||
%files -f WebKit2GTK-4.0.lang |
||||
%license _license_files/*ThirdParty* |
||||
%license _license_files/*WebCore* |
||||
%license _license_files/*WebInspectorUI* |
||||
%license _license_files/*WTF* |
||||
%{_libdir}/libwebkit2gtk-4.0.so.* |
||||
%dir %{_libdir}/girepository-1.0 |
||||
%{_libdir}/girepository-1.0/WebKit2-4.0.typelib |
||||
%{_libdir}/girepository-1.0/WebKit2WebExtension-4.0.typelib |
||||
%{_libdir}/webkit2gtk-4.0/ |
||||
# Turn on executable bit again for bundled icu libraries. |
||||
# Was disabled in %%install to prevent debuginfo stripping. |
||||
%attr(0755,root,root) %{_libdir}/webkit2gtk-4.0/libicudata.so.57.1 |
||||
%attr(0755,root,root) %{_libdir}/webkit2gtk-4.0/libicui18n.so.57.1 |
||||
%attr(0755,root,root) %{_libdir}/webkit2gtk-4.0/libicuuc.so.57.1 |
||||
%{_libexecdir}/webkit2gtk-4.0/ |
||||
%{_bindir}/WebKitWebDriver |
||||
%exclude %{_libexecdir}/webkit2gtk-4.0/WebKitPluginProcess2 |
||||
|
||||
%files devel |
||||
%{_libexecdir}/webkit2gtk-4.0/MiniBrowser |
||||
%{_includedir}/webkitgtk-4.0/ |
||||
%exclude %{_includedir}/webkitgtk-4.0/JavaScriptCore |
||||
%{_libdir}/libwebkit2gtk-4.0.so |
||||
%{_libdir}/pkgconfig/webkit2gtk-4.0.pc |
||||
%{_libdir}/pkgconfig/webkit2gtk-web-extension-4.0.pc |
||||
%{_datadir}/gir-1.0/WebKit2-4.0.gir |
||||
%{_datadir}/gir-1.0/WebKit2WebExtension-4.0.gir |
||||
|
||||
%files jsc |
||||
%license _license_files/*JavaScriptCore* |
||||
%{_libdir}/libjavascriptcoregtk-4.0.so.* |
||||
%dir %{_libdir}/girepository-1.0 |
||||
%{_libdir}/girepository-1.0/JavaScriptCore-4.0.typelib |
||||
|
||||
%files jsc-devel |
||||
%{_libexecdir}/webkit2gtk-4.0/jsc |
||||
%dir %{_includedir}/webkitgtk-4.0 |
||||
%{_includedir}/webkitgtk-4.0/JavaScriptCore/ |
||||
%{_libdir}/libjavascriptcoregtk-4.0.so |
||||
%{_libdir}/pkgconfig/javascriptcoregtk-4.0.pc |
||||
%dir %{_datadir}/gir-1.0 |
||||
%{_datadir}/gir-1.0/JavaScriptCore-4.0.gir |
||||
|
||||
%files plugin-process-gtk2 |
||||
%{_libexecdir}/webkit2gtk-4.0/WebKitPluginProcess2 |
||||
|
||||
%files doc |
||||
%dir %{_datadir}/gtk-doc |
||||
%dir %{_datadir}/gtk-doc/html |
||||
%{_datadir}/gtk-doc/html/webkit2gtk-4.0/ |
||||
%{_datadir}/gtk-doc/html/webkitdomgtk-4.0/ |
||||
|
||||
%changelog |
||||
* Tue Aug 14 2018 Tomas Popela <tpopela@redhat.com> - 2.20.5-1 |
||||
- Update to 2.20.5 - technically it was not necessary as the only difference |
||||
between 2.20.4 and .5 was the revert of one change, that we already reverted |
||||
while building 2.20.4. But it's better to stay with upstream. |
||||
- Update the labels patch with the version that was pushed upstream. |
||||
- Resolves: rhbz#1576544 |
||||
|
||||
* Thu Aug 09 2018 Tomas Popela <tpopela@redhat.com> - 2.20.4-2 |
||||
- webkitgtk4: Crash on Google login page when a11y is active |
||||
- Resolves: rhbz#1503624 |
||||
- Revert patch causing rendering glitches |
||||
|
||||
* Mon Aug 06 2018 Tomas Popela <tpopela@redhat.com> - 2.20.4-1 |
||||
- Update to 2.20.4 |
||||
- Resolves: rhbz#1576544 |
||||
- WebKitWebProcess crashes when a11y is active |
||||
- Resolves: rhbz#1591638 |
||||
|
||||
* Wed Jun 27 2018 Tomas Popela <tpopela@redhat.com> - 2.20.3-5 |
||||
- Add GStreamer coverity fixes |
||||
- Resolves: rhbz#1576544 |
||||
|
||||
* Tue Jun 26 2018 Tomas Popela <tpopela@redhat.com> - 2.20.3-4 |
||||
- More rpmdiff and covscan fixes |
||||
- Resolves: rhbz#1576544 |
||||
|
||||
* Wed Jun 13 2018 Tomas Popela <tpopela@redhat.com> - 2.20.3-3 |
||||
- Unbundle cmake |
||||
- Add covscan fixes |
||||
- Resolves: rhbz#1576544 |
||||
|
||||
* Tue Jun 12 2018 Tomas Popela <tpopela@redhat.com> - 2.20.3-2 |
||||
- Fix the rpmdiff warning |
||||
- Resolves: rhbz#1576544 |
||||
|
||||
* Mon Jun 11 2018 Tomas Popela <tpopela@redhat.com> - 2.20.3-1 |
||||
- Update to 2.20.3 |
||||
- Resolves: rhbz#1576544 |
||||
|
||||
* Fri Jun 08 2018 Tomas Popela <tpopela@redhat.com> - 2.20.2-1 |
||||
- Update to 2.20.2 |
||||
- Resolves: rhbz#1576544 |
||||
|
||||
* Wed Nov 08 2017 Tomas Popela <tpopela@redhat.com> - 2.16.6-6 |
||||
- Don't strip debug info from bundled icu libraries, otherwise there |
||||
will be conflicts between webkitgtk4-debuginfo and icu-debuginfo packages |
||||
- Resolves: rhbz#1486771 |
||||
|
||||
* Mon Oct 09 2017 Tomas Popela <tpopela@redhat.com> - 2.16.6-5 |
||||
- Update the bundled brotli and woff2 to the latest releases due to |
||||
woff2's license incompatibility with WebKitGTK+ project |
||||
- Resolves: rhbz#1499745 |
||||
- Drop unused patches |
||||
|
||||
* Fri Sep 29 2017 Tomas Popela <tpopela@redhat.com> - 2.16.6-4 |
||||
- Build wayland support |
||||
- Backport fixes proposed by upstream to 2.16 branch |
||||
- Remove accidentally committed workaround for rhbz#1486771 |
||||
- Resolves: rhbz#1496800 |
||||
|
||||
* Tue Sep 05 2017 Tomas Popela <tpopela@redhat.com> - 2.16.6-3 |
||||
- Coverity scan fixes |
||||
- Resolves: rhbz#1476707 |
||||
|
||||
* Fri Aug 25 2017 Tomas Popela <tpopela@redhat.com> - 2.16.6-2 |
||||
- Backport security fixes for bundled icu |
||||
- Backport geoclue2 id fixes |
||||
- Resolves: rhbz#1476707 |
||||
|
||||
* Thu Aug 17 2017 Tomas Popela <tpopela@redhat.com> - 2.16.6-1 |
||||
- Update to 2.16.6 |
||||
- Resolves: rhbz#1476707 |
||||
|
||||
* Fri Jun 16 2017 Tomas Popela <tpopela@redhat.com> - 2.14.7-2 |
||||
- Fix a CLoop patch that was not correctly backported from upstream, causing |
||||
crashes on big endian machines |
||||
- Resolves: rhbz#1442160 |
||||
|
||||
* Thu Jun 01 2017 Tomas Popela <tpopela@redhat.com> - 2.14.7-1 |
||||
- Update to 2.14.7 |
||||
- Backport more of a11y fixes from upstream |
||||
- Fix JSC crashes on big endian arches |
||||
- Resolves: rhbz#1442160 |
||||
|
||||
* Wed May 10 2017 Milan Crha <mcrha@redhat.com> - 2.14.6-6 |
||||
- Add upstream patch to fix login to Google account |
||||
- Resolves: rhbz#1448192 |
||||
|
||||
* Wed Apr 26 2017 Tomas Popela <tpopela@redhat.com> - 2.14.6-5 |
||||
- Don't require icu libraries that are bundled |
||||
- Resolves: rhbz#1414413 |
||||
|
||||
* Tue Apr 25 2017 Tomas Popela <tpopela@redhat.com> - 2.14.6-4 |
||||
- Use the right function for removing from provides |
||||
- Resolves: rhbz#1383614 |
||||
|
||||
* Mon Apr 24 2017 Tomas Popela <tpopela@redhat.com> - 2.14.6-3 |
||||
- Bundle only needed icu libraries |
||||
- Don't list bundled icu libraries in provides |
||||
- Resolves: rhbz#1383614 |
||||
|
||||
* Mon Apr 24 2017 Tomas Popela <tpopela@redhat.com> - 2.14.6-2 |
||||
- Bundle icu57 |
||||
- Resolves: rhbz#1414413 |
||||
|
||||
* Mon Apr 10 2017 Tomas Popela <tpopela@redhat.com> - 2.14.6-1 |
||||
- Update to 2.14.6 |
||||
- Resolves: rhbz#1440681 |
||||
- Don't crash is no render is available in AX render object |
||||
- Resolves: rhbz#1437672 |
||||
|
||||
* Tue Mar 21 2017 Tomas Popela <tpopela@redhat.com> - 2.14.5-5 |
||||
- Add more Coverity scan fixes |
||||
- Remove icu from sources |
||||
- Resolves: rhbz#1383614 |
||||
|
||||
* Mon Mar 13 2017 Tomas Popela <tpopela@redhat.com> - 2.14.5-4 |
||||
- Add some Coverity scan fixes |
||||
- Resolves: rhbz#1383614 |
||||
|
||||
* Tue Feb 28 2017 Tomas Popela <tpopela@redhat.com> - 2.14.5-3 |
||||
- Add explicit requires of webkitgtk4-jsc for -devel and -plugin-process-gtk2 |
||||
subpackages (found by rpmdiff). |
||||
- Resolves: rhbz#1383614 |
||||
|
||||
* Mon Feb 20 2017 Tomas Popela <tpopela@redhat.com> - 2.14.5-2 |
||||
- Remove bundled ICU and require libicu57 |
||||
- Resolves: rhbz#1383614 |
||||
|
||||
* Thu Feb 16 2017 Kalev Lember <klember@redhat.com> - 2.14.5-1 |
||||
- Update to 2.14.5 |
||||
- Resolves: rhbz#1383614 |
||||
|
||||
* Fri Feb 10 2017 Tomas Popela <tpopela@redhat.com> - 2.14.4-1 |
||||
- Initial RHEL packaging |
||||
- Temporary bundling icu57 until rhbz#1414413 is resolved |
||||
- Resolves: rhbz#1383614 |
Loading…
Reference in new issue