From b83b6ab9024f6251be94871b8fdc94aac5325971 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Tue, 16 Sep 2014 08:39:45 -0500 Subject: [PATCH] 1:4.8.6-13 - move qmlviewer to -devel - pull in some upstream fixes --- 0023-Don-t-crash-on-broken-GIF-images.patch | 43 ++ ...d-file-descriptor-leak-in-QFontCache.patch | 379 ++++++++++++++++++ ...blacklist-NIC-certificates-from-Indi.patch | 137 +++++++ ...wPolyline-painting-errors-with-cosme.patch | 44 ++ ...low-Qt4-to-also-build-in-ppc64-el-le.patch | 37 ++ 0067-Fix-AArch64-arm64-detection.patch | 51 +++ ...heck-in-QFontEngineFT-recalcAdvances.patch | 41 ++ ...e-opensource-src-4.8-ppc64le_support.patch | 25 -- ...ere-opensource-src-4.8.6-QTBUG-38367.patch | 17 - qt.spec | 33 +- 10 files changed, 755 insertions(+), 52 deletions(-) create mode 100644 0023-Don-t-crash-on-broken-GIF-images.patch create mode 100644 0030-Memory-and-file-descriptor-leak-in-QFontCache.patch create mode 100644 0047-QSslCertificate-blacklist-NIC-certificates-from-Indi.patch create mode 100644 0065-Fix-QPainter-drawPolyline-painting-errors-with-cosme.patch create mode 100644 0066-Allow-Qt4-to-also-build-in-ppc64-el-le.patch create mode 100644 0067-Fix-AArch64-arm64-detection.patch create mode 100644 0072-Fix-font-cache-check-in-QFontEngineFT-recalcAdvances.patch delete mode 100644 qt-everywhere-opensource-src-4.8-ppc64le_support.patch delete mode 100644 qt-everywhere-opensource-src-4.8.6-QTBUG-38367.patch diff --git a/0023-Don-t-crash-on-broken-GIF-images.patch b/0023-Don-t-crash-on-broken-GIF-images.patch new file mode 100644 index 0000000..0471e0b --- /dev/null +++ b/0023-Don-t-crash-on-broken-GIF-images.patch @@ -0,0 +1,43 @@ +From f1b76c126c476c155af8c404b97c42cd1a709333 Mon Sep 17 00:00:00 2001 +From: Lars Knoll +Date: Thu, 24 Apr 2014 15:33:27 +0200 +Subject: [PATCH 23/74] Don't crash on broken GIF images + +Broken GIF images could set invalid width and height +values inside the image, leading to Qt creating a null +QImage for it. In that case we need to abort decoding +the image and return an error. + +Initial patch by Rich Moore. + +Backport of Id82a4036f478bd6e49c402d6598f57e7e5bb5e1e from Qt 5 + +Task-number: QTBUG-38367 +Change-Id: I0680740018aaa8356d267b7af3f01fac3697312a +Security-advisory: CVE-2014-0190 +Reviewed-by: Richard J. Moore +--- + src/gui/image/qgifhandler.cpp | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/src/gui/image/qgifhandler.cpp b/src/gui/image/qgifhandler.cpp +index 3324f04..5199dd3 100644 +--- a/src/gui/image/qgifhandler.cpp ++++ b/src/gui/image/qgifhandler.cpp +@@ -359,6 +359,13 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length, + memset(bits, 0, image->byteCount()); + } + ++ // Check if the previous attempt to create the image failed. If it ++ // did then the image is broken and we should give up. ++ if (image->isNull()) { ++ state = Error; ++ return -1; ++ } ++ + disposePrevious(image); + disposed = false; + +-- +1.9.3 + diff --git a/0030-Memory-and-file-descriptor-leak-in-QFontCache.patch b/0030-Memory-and-file-descriptor-leak-in-QFontCache.patch new file mode 100644 index 0000000..f6aea91 --- /dev/null +++ b/0030-Memory-and-file-descriptor-leak-in-QFontCache.patch @@ -0,0 +1,379 @@ +From 45693cc638d10890f2816a38d38de6ddaf04ffd3 Mon Sep 17 00:00:00 2001 +From: Simon Yuan +Date: Wed, 2 Apr 2014 16:02:04 +1300 +Subject: [PATCH 30/74] Memory and file descriptor leak in QFontCache + +Make the cache also use the ref counts +Make everyone who decrements a ref count check for 0 and delete +Move all cache logic to the cache +Same idea as 36cb3f3 and b3dae68 in Qt 5 without the extra stuff + +Task-number: QTBUG-38035 +Change-Id: I27bea376f4ec0888463b4ec3ed1a6bef00d041f8 +Reviewed-by: Konstantin Ritt +Reviewed-by: Eskil Abrahamsen Blomfeldt +--- + src/gui/text/qfont.cpp | 102 +++++++++++++++++------------------------- + src/gui/text/qfontengine.cpp | 7 +-- + src/gui/text/qrawfont.cpp | 13 +++--- + src/gui/text/qrawfont_win.cpp | 4 +- + src/gui/text/qstatictext.cpp | 6 +-- + src/gui/text/qtextengine.cpp | 7 +-- + 6 files changed, 55 insertions(+), 84 deletions(-) + +diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp +index 7e94c1e..fa9bb70 100644 +--- a/src/gui/text/qfont.cpp ++++ b/src/gui/text/qfont.cpp +@@ -275,8 +275,8 @@ QFontPrivate::QFontPrivate(const QFontPrivate &other) + + QFontPrivate::~QFontPrivate() + { +- if (engineData) +- engineData->ref.deref(); ++ if (engineData && !engineData->ref.deref()) ++ delete engineData; + engineData = 0; + if (scFont && scFont != this) + scFont->ref.deref(); +@@ -298,7 +298,8 @@ QFontEngine *QFontPrivate::engineForScript(int script) const + script = QUnicodeTables::Common; + if (engineData && engineData->fontCache != QFontCache::instance()) { + // throw out engineData that came from a different thread +- engineData->ref.deref(); ++ if (!engineData->ref.deref()) ++ delete engineData; + engineData = 0; + } + if (!engineData || !QT_FONT_ENGINE_FROM_DATA(engineData, script)) +@@ -417,13 +418,13 @@ QFontEngineData::~QFontEngineData() + { + #if !defined(Q_WS_MAC) + for (int i = 0; i < QUnicodeTables::ScriptCount; ++i) { +- if (engines[i]) +- engines[i]->ref.deref(); ++ if (engines[i] && !engines[i]->ref.deref()) ++ delete engines[i]; + engines[i] = 0; + } + #else +- if (engine) +- engine->ref.deref(); ++ if (engine && !engine->ref.deref()) ++ delete engine; + engine = 0; + #endif // Q_WS_X11 || Q_WS_WIN || Q_WS_MAC + } +@@ -770,8 +771,8 @@ QFont::QFont(QFontPrivate *data) + void QFont::detach() + { + if (d->ref == 1) { +- if (d->engineData) +- d->engineData->ref.deref(); ++ if (d->engineData && !d->engineData->ref.deref()) ++ delete d->engineData; + d->engineData = 0; + if (d->scFont && d->scFont != d.data()) + d->scFont->ref.deref(); +@@ -2819,7 +2820,7 @@ QFontCache::~QFontCache() + EngineDataCache::ConstIterator it = engineDataCache.constBegin(), + end = engineDataCache.constEnd(); + while (it != end) { +- if (it.value()->ref == 0) ++ if (it.value()->ref.deref() == 0) + delete it.value(); + else + FC_DEBUG("QFontCache::~QFontCache: engineData %p still has refcount %d", +@@ -2827,24 +2828,6 @@ QFontCache::~QFontCache() + ++it; + } + } +- EngineCache::ConstIterator it = engineCache.constBegin(), +- end = engineCache.constEnd(); +- while (it != end) { +- if (--it.value().data->cache_count == 0) { +- if (it.value().data->ref == 0) { +- FC_DEBUG("QFontCache::~QFontCache: deleting engine %p key=(%d / %g %g %d %d %d)", +- it.value().data, it.key().script, it.key().def.pointSize, +- it.key().def.pixelSize, it.key().def.weight, it.key().def.style, +- it.key().def.fixedPitch); +- +- delete it.value().data; +- } else { +- FC_DEBUG("QFontCache::~QFontCache: engine = %p still has refcount %d", +- it.value().data, int(it.value().data->ref)); +- } +- } +- ++it; +- } + } + + void QFontCache::clear() +@@ -2856,16 +2839,14 @@ void QFontCache::clear() + QFontEngineData *data = it.value(); + #if !defined(Q_WS_MAC) + for (int i = 0; i < QUnicodeTables::ScriptCount; ++i) { +- if (data->engines[i]) { +- data->engines[i]->ref.deref(); +- data->engines[i] = 0; +- } ++ if (data->engines[i] && !data->engines[i]->ref.deref()) ++ delete data->engines[i]; ++ data->engines[i] = 0; + } + #else +- if (data->engine) { +- data->engine->ref.deref(); +- data->engine = 0; +- } ++ if (data->engine && !data->engine->ref.deref()) ++ delete data->engine; ++ data->engine = 0; + #endif + ++it; + } +@@ -2873,15 +2854,7 @@ void QFontCache::clear() + + for (EngineCache::Iterator it = engineCache.begin(), end = engineCache.end(); + it != end; ++it) { +- if (it->data->ref == 0) { +- delete it->data; +- it->data = 0; +- } +- } +- +- for (EngineCache::Iterator it = engineCache.begin(), end = engineCache.end(); +- it != end; ++it) { +- if (it->data && it->data->ref == 0) { ++ if (it->data->ref.deref() == 0) { + delete it->data; + it->data = 0; + } +@@ -2916,6 +2889,8 @@ void QFontCache::insertEngineData(const Key &key, QFontEngineData *engineData) + { + FC_DEBUG("QFontCache: inserting new engine data %p", engineData); + ++ Q_ASSERT(!engineDataCache.contains(key)); ++ engineData->ref.ref(); // the cache has a reference + engineDataCache.insert(key, engineData); + increaseCost(sizeof(QFontEngineData)); + } +@@ -2946,6 +2921,11 @@ void QFontCache::insertEngine(const Key &key, QFontEngine *engine) + Engine data(engine); + data.timestamp = ++current_timestamp; + ++ QFontEngine *oldEngine = engineCache.value(key).data; ++ engine->ref.ref(); // the cache has a reference ++ if (oldEngine && !oldEngine->ref.deref()) ++ delete oldEngine; ++ + engineCache.insert(key, data); + + // only increase the cost if this is the first time we insert the engine +@@ -3005,12 +2985,11 @@ void QFontCache::cleanupPrinterFonts() + continue; + } + +- if(it.value()->ref != 0) { +- for(int i = 0; i < QUnicodeTables::ScriptCount; ++i) { +- if(it.value()->engines[i]) { +- it.value()->engines[i]->ref.deref(); +- it.value()->engines[i] = 0; +- } ++ if (it.value()->ref > 1) { ++ for (int i = 0; i < QUnicodeTables::ScriptCount; ++i) { ++ if (it.value()->engines[i] && !it.value()->engines[i]->ref.deref()) ++ delete it.value()->engines[i]; ++ it.value()->engines[i] = 0; + } + ++it; + } else { +@@ -3021,7 +3000,8 @@ void QFontCache::cleanupPrinterFonts() + + FC_DEBUG(" %p", rem.value()); + +- delete rem.value(); ++ if (!rem.value()->ref.deref()) ++ delete rem.value(); + engineDataCache.erase(rem); + } + } +@@ -3030,7 +3010,7 @@ void QFontCache::cleanupPrinterFonts() + EngineCache::Iterator it = engineCache.begin(), + end = engineCache.end(); + while(it != end) { +- if (it.value().data->ref != 0 || it.key().screen == 0) { ++ if (it.value().data->ref != 1 || it.key().screen == 0) { + ++it; + continue; + } +@@ -3044,7 +3024,8 @@ void QFontCache::cleanupPrinterFonts() + FC_DEBUG(" DELETE: last occurrence in cache"); + + decreaseCost(it.value().data->cache_cost); +- delete it.value().data; ++ if (!it.value().data->ref.deref()) ++ delete it.value().data; + } + + engineCache.erase(it++); +@@ -3093,7 +3074,7 @@ void QFontCache::timerEvent(QTimerEvent *) + # endif // Q_WS_X11 || Q_WS_WIN + #endif // QFONTCACHE_DEBUG + +- if (it.value()->ref != 0) ++ if (it.value()->ref > 1) + in_use_cost += engine_data_cost; + } + } +@@ -3109,7 +3090,7 @@ void QFontCache::timerEvent(QTimerEvent *) + int(it.value().data->ref), it.value().data->cache_count, + it.value().data->cache_cost); + +- if (it.value().data->ref != 0) ++ if (it.value().data->ref > 1) + in_use_cost += it.value().data->cache_cost / it.value().data->cache_count; + } + +@@ -3159,7 +3140,7 @@ void QFontCache::timerEvent(QTimerEvent *) + EngineDataCache::Iterator it = engineDataCache.begin(), + end = engineDataCache.end(); + while (it != end) { +- if (it.value()->ref != 0) { ++ if (it.value()->ref > 1) { + ++it; + continue; + } +@@ -3187,7 +3168,7 @@ void QFontCache::timerEvent(QTimerEvent *) + uint least_popular = ~0u; + + for (; it != end; ++it) { +- if (it.value().data->ref != 0) ++ if (it.value().data->ref > 1) + continue; + + if (it.value().timestamp < oldest && +@@ -3200,7 +3181,7 @@ void QFontCache::timerEvent(QTimerEvent *) + FC_DEBUG(" oldest %u least popular %u", oldest, least_popular); + + for (it = engineCache.begin(); it != end; ++it) { +- if (it.value().data->ref == 0 && ++ if (it.value().data->ref == 1 && + it.value().timestamp == oldest && + it.value().hits == least_popular) + break; +@@ -3216,7 +3197,8 @@ void QFontCache::timerEvent(QTimerEvent *) + FC_DEBUG(" DELETE: last occurrence in cache"); + + decreaseCost(it.value().data->cache_cost); +- delete it.value().data; ++ if (!it.value().data->ref.deref()) ++ delete it.value().data; + } else { + /* + this particular font engine is in the cache multiple +diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp +index 9de475c..bf108c4 100644 +--- a/src/gui/text/qfontengine.cpp ++++ b/src/gui/text/qfontengine.cpp +@@ -1325,11 +1325,8 @@ QFontEngineMulti::~QFontEngineMulti() + { + for (int i = 0; i < engines.size(); ++i) { + QFontEngine *fontEngine = engines.at(i); +- if (fontEngine) { +- fontEngine->ref.deref(); +- if (fontEngine->cache_count == 0 && fontEngine->ref == 0) +- delete fontEngine; +- } ++ if (fontEngine && !fontEngine->ref.deref()) ++ delete fontEngine; + } + } + +diff --git a/src/gui/text/qrawfont.cpp b/src/gui/text/qrawfont.cpp +index 2b7554a..cb2bcb3 100644 +--- a/src/gui/text/qrawfont.cpp ++++ b/src/gui/text/qrawfont.cpp +@@ -682,8 +682,7 @@ void QRawFont::setPixelSize(qreal pixelSize) + if (d->fontEngine != 0) + d->fontEngine->ref.ref(); + +- oldFontEngine->ref.deref(); +- if (oldFontEngine->cache_count == 0 && oldFontEngine->ref == 0) ++ if (!oldFontEngine->ref.deref()) + delete oldFontEngine; + } + +@@ -693,12 +692,10 @@ void QRawFont::setPixelSize(qreal pixelSize) + void QRawFontPrivate::cleanUp() + { + platformCleanUp(); +- if (fontEngine != 0) { +- fontEngine->ref.deref(); +- if (fontEngine->cache_count == 0 && fontEngine->ref == 0) +- delete fontEngine; +- fontEngine = 0; +- } ++ if (fontEngine != 0 && !fontEngine->ref.deref()) ++ delete fontEngine; ++ fontEngine = 0; ++ + hintingPreference = QFont::PreferDefaultHinting; + } + +diff --git a/src/gui/text/qrawfont_win.cpp b/src/gui/text/qrawfont_win.cpp +index 6923aae..9b66886 100644 +--- a/src/gui/text/qrawfont_win.cpp ++++ b/src/gui/text/qrawfont_win.cpp +@@ -600,11 +600,11 @@ void QRawFontPrivate::platformLoadFromData(const QByteArray &fontData, + if (request.family != fontEngine->fontDef.family) { + qWarning("QRawFont::platformLoadFromData: Failed to load font. " + "Got fallback instead: %s", qPrintable(fontEngine->fontDef.family)); +- if (fontEngine->cache_count == 0 && fontEngine->ref == 0) ++ if (fontEngine->ref == 0) + delete fontEngine; + fontEngine = 0; + } else { +- Q_ASSERT(fontEngine->cache_count == 0 && fontEngine->ref == 0); ++ Q_ASSERT(fontEngine->ref == 0); + + // Override the generated font name + static_cast(fontEngine)->uniqueFamilyName = uniqueFamilyName; +diff --git a/src/gui/text/qstatictext.cpp b/src/gui/text/qstatictext.cpp +index 657da33..b111200 100644 +--- a/src/gui/text/qstatictext.cpp ++++ b/src/gui/text/qstatictext.cpp +@@ -724,10 +724,8 @@ QStaticTextItem::~QStaticTextItem() + + void QStaticTextItem::setFontEngine(QFontEngine *fe) + { +- if (m_fontEngine != 0) { +- if (!m_fontEngine->ref.deref()) +- delete m_fontEngine; +- } ++ if (m_fontEngine != 0 && !m_fontEngine->ref.deref()) ++ delete m_fontEngine; + + m_fontEngine = fe; + if (m_fontEngine != 0) +diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp +index b371237..f4b86b0 100644 +--- a/src/gui/text/qtextengine.cpp ++++ b/src/gui/text/qtextengine.cpp +@@ -1453,11 +1453,8 @@ void QTextEngine::shape(int item) const + + static inline void releaseCachedFontEngine(QFontEngine *fontEngine) + { +- if (fontEngine) { +- fontEngine->ref.deref(); +- if (fontEngine->cache_count == 0 && fontEngine->ref == 0) +- delete fontEngine; +- } ++ if (fontEngine && !fontEngine->ref.deref()) ++ delete fontEngine; + } + + void QTextEngine::resetFontEngineCache() +-- +1.9.3 + diff --git a/0047-QSslCertificate-blacklist-NIC-certificates-from-Indi.patch b/0047-QSslCertificate-blacklist-NIC-certificates-from-Indi.patch new file mode 100644 index 0000000..a708350 --- /dev/null +++ b/0047-QSslCertificate-blacklist-NIC-certificates-from-Indi.patch @@ -0,0 +1,137 @@ +From 59eb561989f7a7b65c3e9b11d0ac062479013bf2 Mon Sep 17 00:00:00 2001 +From: Peter Hartmann +Date: Wed, 9 Jul 2014 16:22:44 +0200 +Subject: [PATCH 47/74] QSslCertificate: blacklist NIC certificates from India + +Those intermediate certificates were used to issue "unauthorized" +certificates according to +http://googleonlinesecurity.blogspot.de/2014/07/maintaining-digital-certificate-security.html +, and are by default trusted on Windows, so to be safe we blacklist +them here. + +(backport of commit 916c9d469bd0df227dc3be97fcca27e3cf58144f) +Change-Id: I22c6637895dcd21b1f7af73fdd5ca39d4747cf9e +Reviewed-by: Richard J. Moore +--- + src/network/ssl/qsslcertificate.cpp | 4 ++++ + .../blacklisted-nic-india-2007.pem | 25 +++++++++++++++++++++ + .../blacklisted-nic-india-2011.pem | 26 ++++++++++++++++++++++ + .../blacklisted-nic-india-2014.pem | 26 ++++++++++++++++++++++ + 4 files changed, 81 insertions(+) + create mode 100644 tests/auto/qsslcertificate/more-certificates/blacklisted-nic-india-2007.pem + create mode 100644 tests/auto/qsslcertificate/more-certificates/blacklisted-nic-india-2011.pem + create mode 100644 tests/auto/qsslcertificate/more-certificates/blacklisted-nic-india-2014.pem + +diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp +index 254f45b..a015880 100644 +--- a/src/network/ssl/qsslcertificate.cpp ++++ b/src/network/ssl/qsslcertificate.cpp +@@ -832,6 +832,10 @@ static const char *certificate_blacklist[] = { + "2148", "e-islem.kktcmerkezbankasi.org", // Turktrust mis-issued intermediate certificate + + "204199", "AC DG Tr\xC3\xA9sor SSL", // intermediate certificate linking back to ANSSI French National Security Agency ++ ++ "10115", "NIC Certifying Authority", // intermediate certificate from NIC India (2007) ++ "10130", "NIC CA 2011", // intermediate certificate from NIC India (2011) ++ "10161", "NIC CA 2014", // intermediate certificate from NIC India (2014) + 0 + }; + +diff --git a/tests/auto/qsslcertificate/more-certificates/blacklisted-nic-india-2007.pem b/tests/auto/qsslcertificate/more-certificates/blacklisted-nic-india-2007.pem +new file mode 100644 +index 0000000..2106f66 +--- /dev/null ++++ b/tests/auto/qsslcertificate/more-certificates/blacklisted-nic-india-2007.pem +@@ -0,0 +1,25 @@ ++-----BEGIN CERTIFICATE----- ++MIIENjCCAx6gAwIBAgICJ4MwDQYJKoZIhvcNAQEFBQAwOjELMAkGA1UEBhMCSU4x ++EjAQBgNVBAoTCUluZGlhIFBLSTEXMBUGA1UEAxMOQ0NBIEluZGlhIDIwMDcwHhcN ++MDcwNzAyMDY0MTU5WhcNMTUwNzA0MDYzMDAwWjCBsDELMAkGA1UEBhMCSU4xJDAi ++BgNVBAoTG05hdGlvbmFsIEluZm9ybWF0aWNzIENlbnRyZTEOMAwGA1UECxMFTklD ++Q0ExITAfBgNVBAMTGE5JQyBDZXJ0aWZ5aW5nIEF1dGhvcml0eTESMBAGA1UEBxMJ ++TmV3IERlbGhpMSQwIgYJKoZIhvcNAQkBFhVzdXBwb3J0QGNhbWFpbC5uaWMuaW4x ++DjAMBgNVBAgTBURlbGhpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA ++wLRKDEWWC1iWcxpVgA7GJEjQVjGIMx9XPLoaMKXiEQdajHgmjKdOhlFkSWiHgiCS ++Uo39U0/UoC4rAYzBCcfHWdAGjXNs7dt/cz+muK2aMoPoAgXWLF2A48CJMrTcyNFE ++HryIYJeCiK8DTlEhBxL8II9VBx8qKSquizh4MQTmpqvfjHNqd6qCHF6q8W439io5 ++kVIFnGNd/p0V5HFv0OpWeF/IpKJA1m1lb729FwfsVpqipf7DLVQUKtSjK/32RDtB ++hnAmkDlW6IZRPs2F896A5COPSDjJlAeUX8JqDnBOr64bPRgUy0VDnW/soRB3knkn ++5w5ueXj3DrgONtjGcBSwVwIDAQABo4HOMIHLMA8GA1UdEwEB/wQFMAMBAf8wEQYD ++VR0OBAoECEwne24Nsv9UMBMGA1UdIwQMMAqACE8ewFgn2LjkMAsGA1UdDwQEAwIB ++BjCBggYDVR0fBHsweTB3oHWgc4ZxbGRhcDovL25yZGMuY2NhLmdvdi5pbjozODkv ++Y249Q0NBIEluZGlhIDIwMDcsb3U9Q0NBIEluZGlhIDIwMDcsbz1JbmRpYSBQS0ks ++Yz1JTj9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0O2JpbmFyeT8wDQYJKoZIhvcN ++AQEFBQADggEBAKx6RkVgMGQADgl4jTy3qBDq8nvkegDaDnviTUsGzsR6RpooT0xd ++wuKiRU0I7p2gAo6uBTMEZtS+XWJz+7xlfo4fao5XIU4e1fxkQuxddM23/J7M4+Uz ++3pL7ziK5RcVizhQqz3IjSH440/OoFhUBT5d5WWN0hliEcr7+6nLPAOcAX/qR509a ++Djd/aonfyQFCMyfiPpYLx5ElTuqUZeHApJ58+Iprwbu3EIux+C+mfS8QCMY+WYje ++aocCIwIutrmoxIXxGy9yV5OKIe2+4wsCT8aNin+6AV7qNTmFVhp+MF50v69ONTO7 ++w2Sa+ire2N5FgklMW2WTCi8d8rwLzaWuse4= ++-----END CERTIFICATE----- +diff --git a/tests/auto/qsslcertificate/more-certificates/blacklisted-nic-india-2011.pem b/tests/auto/qsslcertificate/more-certificates/blacklisted-nic-india-2011.pem +new file mode 100644 +index 0000000..d3a8c10 +--- /dev/null ++++ b/tests/auto/qsslcertificate/more-certificates/blacklisted-nic-india-2011.pem +@@ -0,0 +1,26 @@ ++-----BEGIN CERTIFICATE----- ++MIIEWzCCA0OgAwIBAgICJ5IwDQYJKoZIhvcNAQELBQAwOjELMAkGA1UEBhMCSU4x ++EjAQBgNVBAoTCUluZGlhIFBLSTEXMBUGA1UEAxMOQ0NBIEluZGlhIDIwMTEwHhcN ++MTEwMzExMDgxNTExWhcNMTYwMzExMDYzMDAwWjCByDELMAkGA1UEBhMCSU4xJDAi ++BgNVBAoTG05hdGlvbmFsIEluZm9ybWF0aWNzIENlbnRyZTEdMBsGA1UECxMUQ2Vy ++dGlmeWluZyBBdXRob3JpdHkxDzANBgNVBBETBjExMDAwMzEOMAwGA1UECBMFRGVs ++aGkxHjAcBgNVBAkTFUxvZGhpIFJvYWQsIE5ldyBEZWxoaTEdMBsGA1UEMwwUQS1C ++bG9jaywgQ0dPIENvbXBsZXgxFDASBgNVBAMTC05JQyBDQSAyMDExMIIBIjANBgkq ++hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7J/N88MoXcCHTz4A5DKF59+8kvSnriGr ++TEowLSa5NCvH+o89+Mf7V260kKZJ/hQox5RG/F8/gY7u9ziLeypbedeG8EIl88HC ++4x9hT0SNLsrj9qo90waDuGYB4/KQ8q5E6ivVxxV0epzQfFA5A5biKltPBbku/M4D ++iZ+TqBbHxo6nRUEZoukJi0+JLykGI4VpJlQBzow04omxQUZHzvCffo6QvN6FdzZ0 ++MopwqaggyfHDFu9o4elCR9Kd/obYlgXAHLYwJlN0pybbe2WpKj81/pxDhKgxrVN+ ++OZaI5OMBBkjDRQG+ZyEnQb8XYMNPJbOgQGYgsRdPPjIn7poTzxe7SQIDAQABo4Hb ++MIHYMBIGA1UdEwEB/wQIMAYBAf8CAQEwEQYDVR0OBAoECE5VT66z36FmMBIGA1Ud ++IAQLMAkwBwYFYIJkZAIwEwYDVR0jBAwwCoAITQeoY/LbHN8wLgYIKwYBBQUHAQEE ++IjAgMB4GCCsGAQUFBzABhhJodHRwOi8vb2N2cy5nb3YuaW4wDgYDVR0PAQH/BAQD ++AgEGMEYGA1UdHwQ/MD0wO6A5oDeGNWh0dHA6Ly9jY2EuZ292LmluL3J3L3Jlc291 ++cmNlcy9DQ0FJbmRpYTIwMTFMYXRlc3QuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQB5 ++LCqtHbxfO72KRWJbW9dAHNh2xh8n7wstNgSPHLbjL5B0l7RZlCFauy4fjc2faMiB ++xnOq5oEXeIZBrT2NkuEymQ8f0Pzm3pcXrMkFrj78SiA07/cPQShBKKpw39t6puJV ++8ykiVZMZvSCjCzzZZlVO12b2ChADkf6wtseftx5O/zBsqP3Y2+3+KvEeDVtuseKu ++FV2OxSsqSfffJq7IYTwpRPOVzHGJnjV3Igtj3zAzZm8CWxRM/yhnkGyVc+xz/T7o ++WY0870eciR+bmLjZ9j0opudZR6e+lCsMHH2Lxc8C/0XRcCzcganxfWCb/fb0gx44 ++iY0a+wWCVebjuyKU/BXk ++-----END CERTIFICATE----- +diff --git a/tests/auto/qsslcertificate/more-certificates/blacklisted-nic-india-2014.pem b/tests/auto/qsslcertificate/more-certificates/blacklisted-nic-india-2014.pem +new file mode 100644 +index 0000000..5467086 +--- /dev/null ++++ b/tests/auto/qsslcertificate/more-certificates/blacklisted-nic-india-2014.pem +@@ -0,0 +1,26 @@ ++-----BEGIN CERTIFICATE----- ++MIIEWzCCA0OgAwIBAgICJ7EwDQYJKoZIhvcNAQELBQAwOjELMAkGA1UEBhMCSU4x ++EjAQBgNVBAoTCUluZGlhIFBLSTEXMBUGA1UEAxMOQ0NBIEluZGlhIDIwMTQwHhcN ++MTQwMzA1MTExNTI0WhcNMjQwMzA1MDYzMDAwWjCByDELMAkGA1UEBhMCSU4xJDAi ++BgNVBAoTG05hdGlvbmFsIEluZm9ybWF0aWNzIENlbnRyZTEdMBsGA1UECxMUQ2Vy ++dGlmeWluZyBBdXRob3JpdHkxDzANBgNVBBETBjExMDAwMzEOMAwGA1UECBMFRGVs ++aGkxHjAcBgNVBAkTFUxvZGhpIFJvYWQsIE5ldyBEZWxoaTEdMBsGA1UEMxMUQS1C ++bG9jaywgQ0dPIENvbXBsZXgxFDASBgNVBAMTC05JQyBDQSAyMDE0MIIBIjANBgkq ++hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/OQ56Ge9MhJiBwtOlCJP4p5gjcCuqkQ2 ++6BCSQgfAsxyNxAwtL1f0h3d5KNFIInIG2Y9PwBgUrgavOWy2cZICxgXIGaOzK5bI ++TyGhxYMPUzkazGppfj0ScW7Ed/kjeDnic3WlYkPwtNaV1qwTElr8zqPUtT27ZDqd ++6upor9MICngXAC1tHjhPuGrGtu4i6FMPrmkofwdh8dkuRzU/OPjf9lA+E9Qu0Nvq ++soI9grJA0etgRfn9juR4X3KTG21qHnza50PpMYC4+vh8jAnIT7Kcz8Ggr4eghkvP +++iz2yEtIcV9M1xeo98XU/jxuYS7LeWtO79jkiqCIqgI8T3x7LHuCaQIDAQABo4Hb ++MIHYMBIGA1UdEwEB/wQIMAYBAf8CAQEwEQYDVR0OBAoECEZwyi8lTsNHMBIGA1Ud ++IAQLMAkwBwYFYIJkZAIwEwYDVR0jBAwwCoAIQrjFz22zV+EwLgYIKwYBBQUHAQEE ++IjAgMB4GCCsGAQUFBzABhhJodHRwOi8vb2N2cy5nb3YuaW4wDgYDVR0PAQH/BAQD ++AgEGMEYGA1UdHwQ/MD0wO6A5oDeGNWh0dHA6Ly9jY2EuZ292LmluL3J3L3Jlc291 ++cmNlcy9DQ0FJbmRpYTIwMTRMYXRlc3QuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQCB ++i3iJeUlkfjY96HgfBIUEsLi+knO3VUrxDmwps1YyhgRSt22NQLZ4jksSWLI2EQbn ++9k5tH8rwSbsOWf+TZH7jpaKAVSYi1GhEbGR/C2ZeFiWATwtPWKoVGwx/ksUO9YPM ++zf0wh6fDIuyBJIs/nuN93+L2ib+TS5viNky+HrR3XyqE0z43W5bbzMbido3lbwgr ++drMWD6hCNSZs888L0Se4rn2ei0aPmHmxjDjbExF3NF6m2uYC/wAR4cVIzMvvptFY ++n+SAdG/pwkKHaMVncB/cxxEWiKzOxVpjBsM4N19lpxp2RU/n+x7xRK3WTQvNAZdU ++7pcAYmZIXPu/ES9qpK4f ++-----END CERTIFICATE----- +-- +1.9.3 + diff --git a/0065-Fix-QPainter-drawPolyline-painting-errors-with-cosme.patch b/0065-Fix-QPainter-drawPolyline-painting-errors-with-cosme.patch new file mode 100644 index 0000000..338064f --- /dev/null +++ b/0065-Fix-QPainter-drawPolyline-painting-errors-with-cosme.patch @@ -0,0 +1,44 @@ +From 6c3b032693acf86a894a8ea3a30c937a1d08ed7f Mon Sep 17 00:00:00 2001 +From: aavit +Date: Tue, 12 Aug 2014 13:54:17 +0200 +Subject: [PATCH 65/74] Fix QPainter::drawPolyline() painting errors with + cosmetic pen + +Task-number: QTBUG-31579 +Change-Id: I8fd2c03ff9a22e4963bfcbcfe196ae4c61b9e10f +Reviewed-by: Gunnar Sletta +(cherry picked from qtbase/319cbb7597100f3b65792dc6a0ce2885ce6c0e8c) +Reviewed-by: Gunnar Sletta +--- + src/gui/painting/qcosmeticstroker.cpp | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/gui/painting/qcosmeticstroker.cpp b/src/gui/painting/qcosmeticstroker.cpp +index 5ca652e..1255a3b 100644 +--- a/src/gui/painting/qcosmeticstroker.cpp ++++ b/src/gui/painting/qcosmeticstroker.cpp +@@ -533,8 +533,8 @@ void QCosmeticStroker::drawPath(const QVectorPath &path) + + QPointF p = QPointF(points[0], points[1]) * state->matrix; + patternOffset = state->lastPen.dashOffset()*64; +- lastPixel.x = -1; +- lastPixel.y = -1; ++ lastPixel.x = INT_MIN; ++ lastPixel.y = INT_MIN; + + bool closed; + const QPainterPath::ElementType *e = subPath(type, end, points, &closed); +@@ -588,8 +588,8 @@ void QCosmeticStroker::drawPath(const QVectorPath &path) + QPointF p = QPointF(points[0], points[1]) * state->matrix; + QPointF movedTo = p; + patternOffset = state->lastPen.dashOffset()*64; +- lastPixel.x = -1; +- lastPixel.y = -1; ++ lastPixel.x = INT_MIN; ++ lastPixel.y = INT_MIN; + + const qreal *begin = points; + const qreal *end = points + 2*path.elementCount(); +-- +1.9.3 + diff --git a/0066-Allow-Qt4-to-also-build-in-ppc64-el-le.patch b/0066-Allow-Qt4-to-also-build-in-ppc64-el-le.patch new file mode 100644 index 0000000..7b39581 --- /dev/null +++ b/0066-Allow-Qt4-to-also-build-in-ppc64-el-le.patch @@ -0,0 +1,37 @@ +From 3633f35a607872108fdc3ce06914f7d42a4facdf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Lisandro=20Dami=C3=A1n=20Nicanor=20P=C3=A9rez=20Meyer?= + +Date: Sat, 23 Aug 2014 15:05:34 -0300 +Subject: [PATCH 66/74] Allow Qt4 to also build in ppc64[el le] + +This simple patch allows ppc64le (aka ppc64el) to build Qt4. + +The original patch was done by Ubuntu's William Grant [0], but +I higly doubt this is copyrighteable. + +[0] + +Change-Id: I4cd204e314789337e34b460dda6e18143e3712ec +Reviewed-by: Dmitry Shachnev +Reviewed-by: Thiago Macieira +Reviewed-by: Oswald Buddenhagen +--- + configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure b/configure +index a9ba7c8..ea7cc08 100755 +--- a/configure ++++ b/configure +@@ -3229,7 +3229,7 @@ if [ -z "${CFG_HOST_ARCH}" ]; then + fi + CFG_HOST_ARCH=powerpc + ;; +- *:*:ppc64) ++ *:*:ppc64*) + if [ "$OPT_VERBOSE" = "yes" ]; then + echo " 64-bit PowerPC (powerpc)" + fi +-- +1.9.3 + diff --git a/0067-Fix-AArch64-arm64-detection.patch b/0067-Fix-AArch64-arm64-detection.patch new file mode 100644 index 0000000..0e3f389 --- /dev/null +++ b/0067-Fix-AArch64-arm64-detection.patch @@ -0,0 +1,51 @@ +From 93c137ea29f011a267e22fa644a40aba6e3e2d22 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Lisandro=20Dami=C3=A1n=20Nicanor=20P=C3=A9rez=20Meyer?= + +Date: Wed, 20 Aug 2014 17:52:49 -0300 +Subject: [PATCH 67/74] Fix AArch64/arm64 detection. + +The detection needs to go before arm, else the system will detect AArch64/arm64 +as arm. + +This patch comes from Wookey, he has agreed to put it under BSD or Expat +to allow it's inclusion in here: + + +Change-Id: Ic2171c03fca8bb871347940fa3a2bc467776f797 +Reviewed-by: Dmitry Shachnev +Reviewed-by: Oswald Buddenhagen +--- + configure | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/configure b/configure +index ea7cc08..f3a800a 100755 +--- a/configure ++++ b/configure +@@ -3241,17 +3241,17 @@ if [ -z "${CFG_HOST_ARCH}" ]; then + fi + CFG_HOST_ARCH=s390 + ;; +- *:*:arm*) ++ *:*:aarch64*|*:*:arm64*) + if [ "$OPT_VERBOSE" = "yes" ]; then +- echo " ARM (arm)" ++ echo " AArch64 (aarch64)" + fi +- CFG_HOST_ARCH=arm ++ CFG_HOST_ARCH=aarch64 + ;; +- *:*:aarch64*) ++ *:*:arm*) + if [ "$OPT_VERBOSE" = "yes" ]; then +- echo " AArch64 (aarch64)" ++ echo " ARM (arm)" + fi +- CFG_HOST_ARCH=aarch64 ++ CFG_HOST_ARCH=arm + ;; + Linux:*:sparc*) + if [ "$OPT_VERBOSE" = "yes" ]; then +-- +1.9.3 + diff --git a/0072-Fix-font-cache-check-in-QFontEngineFT-recalcAdvances.patch b/0072-Fix-font-cache-check-in-QFontEngineFT-recalcAdvances.patch new file mode 100644 index 0000000..04948a0 --- /dev/null +++ b/0072-Fix-font-cache-check-in-QFontEngineFT-recalcAdvances.patch @@ -0,0 +1,41 @@ +From 80e3108f5cd1e1850ec81a21100d79a0946addd7 Mon Sep 17 00:00:00 2001 +From: Miikka Heikkinen +Date: Fri, 16 Mar 2012 11:13:55 +0200 +Subject: [PATCH 72/74] Fix font cache check in QFontEngineFT::recalcAdvances() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Cached font was used regardless of the format, resulting in incorrect +advance in some cases when default format differed from the cached +format. + +Task-number: QTBUG-24188 +Change-Id: I39e4156bd9ba743afa7e106e934c90227fbf2b8b +Reviewed-by: Jiang Jiang +(cherry picked from qtbase/2ea976c3a713535c2419d936d575e0b24545f0fa) +Reviewed-by: Miikka Heikkinen +Reviewed-by: Lisandro Damián Nicanor Pérez Meyer +Reviewed-by: Jiang Jiang +--- + src/gui/text/qfontengine_ft.cpp | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp +index aecbf76..44a0aca 100644 +--- a/src/gui/text/qfontengine_ft.cpp ++++ b/src/gui/text/qfontengine_ft.cpp +@@ -1603,7 +1603,9 @@ void QFontEngineFT::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFlag + (flags & HB_ShaperFlag_UseDesignMetrics)) && FT_IS_SCALABLE(freetype->face); + for (int i = 0; i < glyphs->numGlyphs; i++) { + Glyph *g = defaultGlyphSet.getGlyph(glyphs->glyphs[i]); +- if (g) { ++ // Since we are passing Format_None to loadGlyph, use same default format logic as loadGlyph ++ GlyphFormat acceptableFormat = (defaultFormat != Format_None) ? defaultFormat : Format_Mono; ++ if (g && g->format == acceptableFormat) { + glyphs->advances_x[i] = design ? QFixed::fromFixed(g->linearAdvance) : QFixed(g->advance); + } else { + if (!face) +-- +1.9.3 + diff --git a/qt-everywhere-opensource-src-4.8-ppc64le_support.patch b/qt-everywhere-opensource-src-4.8-ppc64le_support.patch deleted file mode 100644 index 3438e25..0000000 --- a/qt-everywhere-opensource-src-4.8-ppc64le_support.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- qt-everywhere-opensource-src-4.8.5/configure 2013-10-10 00:40:17.000000000 +0200 -+++ qt-everywhere-opensource-src-4.8.5/configure 2013-10-10 13:47:49.000000000 +0200 -@@ -3235,6 +3235,12 @@ if [ -z "${CFG_HOST_ARCH}" ]; then - fi - CFG_HOST_ARCH=powerpc - ;; -+ ppc64le:*:*|*:ppc64le:*|*:*:ppc64le) -+ if [ "$OPT_VERBOSE" = "yes" ]; then -+ echo " 64-bit PowerPC little endian (ppc64le)" -+ fi -+ CFG_HOST_ARCH=powerpc -+ ;; - *:*:s390*) - if [ "$OPT_VERBOSE" = "yes" ]; then - echo " IBM S/390 (s390)" -@@ -3299,6 +3305,9 @@ if [ "$PLATFORM" != "$XPLATFORM" -a "$CF - arm*) - CFG_ARCH=arm - ;; -+ ppc64le) -+ CFG_ARCH=powerpc -+ ;; - *) - CFG_ARCH="$CFG_EMBEDDED" - ;; diff --git a/qt-everywhere-opensource-src-4.8.6-QTBUG-38367.patch b/qt-everywhere-opensource-src-4.8.6-QTBUG-38367.patch deleted file mode 100644 index 1dad10e..0000000 --- a/qt-everywhere-opensource-src-4.8.6-QTBUG-38367.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.6/src/gui/image/qgifhandler.cpp.QTBUG-38367 qt-everywhere-opensource-src-4.8.6/src/gui/image/qgifhandler.cpp ---- qt-everywhere-opensource-src-4.8.6/src/gui/image/qgifhandler.cpp.QTBUG-38367 2014-04-10 13:37:12.000000000 -0500 -+++ qt-everywhere-opensource-src-4.8.6/src/gui/image/qgifhandler.cpp 2014-04-24 15:58:54.515862458 -0500 -@@ -359,6 +359,13 @@ int QGIFFormat::decode(QImage *image, co - memset(bits, 0, image->byteCount()); - } - -+ // Check if the previous attempt to create the image failed. If it -+ // did then the image is broken and we should give up. -+ if (image->isNull()) { -+ state = Error; -+ return -1; -+ } -+ - disposePrevious(image); - disposed = false; - diff --git a/qt.spec b/qt.spec index 2fe0286..3d1893b 100644 --- a/qt.spec +++ b/qt.spec @@ -31,7 +31,7 @@ Summary: Qt toolkit Name: qt Epoch: 1 Version: 4.8.6 -Release: 12%{?dist} +Release: 13%{?dist} # See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details License: (LGPLv2 with exceptions or GPLv3 with exceptions) and ASL 2.0 and BSD and FTL and MIT @@ -168,12 +168,17 @@ Patch185: qt-everywhere-opensource-src-4.8-ppc64le_support.patch ## upstream git Patch210: 0010-QDbus-Fix-a-b-comparison.patch +Patch223: 0023-Don-t-crash-on-broken-GIF-images.patch Patch225: 0025-Fix-visual-index-lookup-in-QTreeViewPrivate-adjustVi.patch +Patch230: 0030-Memory-and-file-descriptor-leak-in-QFontCache.patch Patch234: 0034-Fix-raster-graphics-on-X11-RGB30.patch +Patch247: 0047-QSslCertificate-blacklist-NIC-certificates-from-Indi.patch +Patch265: 0065-Fix-QPainter-drawPolyline-painting-errors-with-cosme.patch +Patch266: 0066-Allow-Qt4-to-also-build-in-ppc64-el-le.patch +Patch267: 0067-Fix-AArch64-arm64-detection.patch +Patch272: 0072-Fix-font-cache-check-in-QFontEngineFT-recalcAdvances.patch ## security patches -# https://bugreports.qt-project.org/browse/QTBUG-38367 -Patch300: qt-everywhere-opensource-src-4.8.6-QTBUG-38367.patch # desktop files Source20: assistant.desktop @@ -549,14 +554,20 @@ rm -fv mkspecs/linux-g++*/qmake.conf.multilib-optflags # upstream git %patch210 -p1 -b .0010 +%patch223 -p1 -b .0023 %patch225 -p1 -b .0025 +%patch230 -p1 -b .0030 %patch234 -p1 -b .0034 +%patch247 -p1 -b .0047 +%patch265 -p1 -b .0065 +%patch266 -p1 -b .0066 +%patch267 -p1 -b .0067 +%patch272 -p1 -b .0072 # security fixes # regression fixes for the security fixes %patch84 -p1 -b .QTBUG-35459 %patch86 -p1 -b .systemtrayicon -%patch300 -p1 -b .QTBUG-38367 # drop -fexceptions from $RPM_OPT_FLAGS RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS | sed 's|-fexceptions||g'` @@ -1073,6 +1084,7 @@ fi %{_qt4_bindir}/pixeltool* %{_qt4_bindir}/qdoc3* %{_qt4_bindir}/qmake* +%{_qt4_bindir}/qmlviewer %{_qt4_bindir}/qmlplugindump %{_qt4_bindir}/qt3to4 %{_qt4_bindir}/qttracereplay @@ -1091,16 +1103,17 @@ fi %{_bindir}/lrelease* %{_bindir}/lupdate* %{_bindir}/moc* -%{_bindir}/qmake* %{_bindir}/uic* %{_bindir}/designer* %{_bindir}/linguist* %{_bindir}/lconvert %{_bindir}/pixeltool +%{_bindir}/qcollectiongenerator %{_bindir}/qdoc3 +%{_bindir}/qmake* +%{_bindir}/qmlviewer %{_bindir}/qt3to4 %{_bindir}/qttracereplay -%{_bindir}/qcollectiongenerator %if 0%{?dbus:1} %{_bindir}/qdbuscpp2xml %{_bindir}/qdbusxml2cpp @@ -1241,10 +1254,6 @@ fi %exclude %{_qt4_plugindir}/designer/libqwebview.so %endif %exclude %{_qt4_plugindir}/sqldrivers -%if "%{_qt4_bindir}" != "%{_bindir}" -%{_bindir}/qmlviewer -%endif -%{_qt4_bindir}/qmlviewer %{_datadir}/icons/hicolor/*/apps/qt4-logo.* %if 0%{?dbus:1} @@ -1271,6 +1280,10 @@ fi %changelog +* Tue Sep 16 2014 Rex Dieter - 1:4.8.6-13 +- move qmlviewer to -devel +- pull in some upstream fixes + * Sun Aug 17 2014 Fedora Release Engineering - 1:4.8.6-12 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild