qt-4.8.7-rc2
This commit is contained in:
parent
f83530ad62
commit
b6924d7787
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
/hi128-app-qt4-logo.png
|
/hi128-app-qt4-logo.png
|
||||||
/hi48-app-qt4-logo.png
|
/hi48-app-qt4-logo.png
|
||||||
/qt-everywhere-opensource-src-4.8.6.tar.gz
|
/qt-everywhere-opensource-src-4.8.6.tar.gz
|
||||||
|
/qt-everywhere-opensource-src-4.8.7-rc2.tar.gz
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
From d0b790dcd02da959cbdfc83d606906cead9e8375 Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Faure <david.faure@kdab.com>
|
|
||||||
Date: Sat, 12 Apr 2014 11:25:28 +0200
|
|
||||||
Subject: [PATCH 10/37] QDbus: Fix (!a == b) comparison
|
|
||||||
|
|
||||||
! binds to a, and that is wrong here.
|
|
||||||
|
|
||||||
(cherry picked from qtbase/4b7cd57719a637189696d673b014ae785df669bf)
|
|
||||||
|
|
||||||
Change-Id: I75542a0c27f39fb6e684dedd9925a1f3748d4919
|
|
||||||
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
|
|
||||||
---
|
|
||||||
src/dbus/qdbuspendingcall.cpp | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/dbus/qdbuspendingcall.cpp b/src/dbus/qdbuspendingcall.cpp
|
|
||||||
index 06597a6..b7def2e 100644
|
|
||||||
--- a/src/dbus/qdbuspendingcall.cpp
|
|
||||||
+++ b/src/dbus/qdbuspendingcall.cpp
|
|
||||||
@@ -225,7 +225,7 @@ void QDBusPendingCallPrivate::checkReceivedSignature()
|
|
||||||
return; // no signature to validate against
|
|
||||||
|
|
||||||
// can't use startsWith here because a null string doesn't start or end with an empty string
|
|
||||||
- if (!replyMessage.signature().indexOf(expectedReplySignature) == 0) {
|
|
||||||
+ if (replyMessage.signature().indexOf(expectedReplySignature) != 0) {
|
|
||||||
QString errorMsg = QLatin1String("Unexpected reply signature: got \"%1\", "
|
|
||||||
"expected \"%2\"");
|
|
||||||
replyMessage = QDBusMessage::createError(
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
|||||||
From f1b76c126c476c155af8c404b97c42cd1a709333 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lars Knoll <lars.knoll@digia.com>
|
|
||||||
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 <rich@kde.org>
|
|
||||||
---
|
|
||||||
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
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
|||||||
From 6d76e943dab0971d376cebb15fe531efc60622ac Mon Sep 17 00:00:00 2001
|
|
||||||
From: Friedemann Kleint <Friedemann.Kleint@digia.com>
|
|
||||||
Date: Mon, 5 May 2014 10:59:56 +0200
|
|
||||||
Subject: [PATCH 25/37] Fix visual index lookup in
|
|
||||||
QTreeViewPrivate::adjustViewOptionsForIndex().
|
|
||||||
|
|
||||||
Determine the visual index by looking up the column of the QModelIndex
|
|
||||||
in the logicalIndices array instead of looping.
|
|
||||||
|
|
||||||
Task-number: QTBUG-37813
|
|
||||||
Change-Id: I5c3c73c67537877b03cdc2c36a52041d99f7f49d
|
|
||||||
Reviewed-by: David Faure <david.faure@kdab.com>
|
|
||||||
(cherry picked from qtbase/85aef2dd4b059d2ba9cba4605d9fef87f3e2c4fc)
|
|
||||||
---
|
|
||||||
src/gui/itemviews/qtreeview.cpp | 11 ++---------
|
|
||||||
tests/auto/qtreeview/tst_qtreeview.cpp | 27 +++++++++++++++++++++++++++
|
|
||||||
2 files changed, 29 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/gui/itemviews/qtreeview.cpp b/src/gui/itemviews/qtreeview.cpp
|
|
||||||
index f506f48..fdf020e 100644
|
|
||||||
--- a/src/gui/itemviews/qtreeview.cpp
|
|
||||||
+++ b/src/gui/itemviews/qtreeview.cpp
|
|
||||||
@@ -1367,15 +1367,8 @@ void QTreeViewPrivate::adjustViewOptionsForIndex(QStyleOptionViewItemV4 *option,
|
|
||||||
const int right = (spanning ? header->visualIndex(0) : header->count() - 1 );
|
|
||||||
calcLogicalIndices(&logicalIndices, &viewItemPosList, left, right);
|
|
||||||
|
|
||||||
- int columnIndex = 0;
|
|
||||||
- for (int visualIndex = 0; visualIndex < current.column(); ++visualIndex) {
|
|
||||||
- int logicalIndex = header->logicalIndex(visualIndex);
|
|
||||||
- if (!header->isSectionHidden(logicalIndex)) {
|
|
||||||
- ++columnIndex;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- option->viewItemPosition = viewItemPosList.at(columnIndex);
|
|
||||||
+ const int visualIndex = logicalIndices.indexOf(current.column());
|
|
||||||
+ option->viewItemPosition = viewItemPosList.at(visualIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,379 +0,0 @@
|
|||||||
From 45693cc638d10890f2816a38d38de6ddaf04ffd3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon Yuan <simon.yuan@navico.com>
|
|
||||||
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 <ritt.ks@gmail.com>
|
|
||||||
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
|
|
||||||
---
|
|
||||||
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<QFontEngineWin *>(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
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
|||||||
From 01f42466d37dbbdedd0c2386f2b83c3bc7c3873b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Allan Sandfeld Jensen <allan.jensen@digia.com>
|
|
||||||
Date: Mon, 26 May 2014 09:25:42 +0200
|
|
||||||
Subject: [PATCH 34/37] Fix raster graphics on X11 RGB30
|
|
||||||
|
|
||||||
The window surface incorrectly assumes that any pixel depth of 24 or
|
|
||||||
above would be on 8bit/color. This breaks 10bit/color formats like
|
|
||||||
RGB30. This patch instead make it specifically check for color depth 24
|
|
||||||
or 32 which are the two with 8bit/color.
|
|
||||||
|
|
||||||
Task-number: QTBUG-25998
|
|
||||||
Change-Id: Id0b7e07bdb64679f8c647158938da12efede9142
|
|
||||||
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
|
|
||||||
---
|
|
||||||
src/gui/painting/qwindowsurface_raster.cpp | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/gui/painting/qwindowsurface_raster.cpp b/src/gui/painting/qwindowsurface_raster.cpp
|
|
||||||
index ae5a591..1f2b3fe 100644
|
|
||||||
--- a/src/gui/painting/qwindowsurface_raster.cpp
|
|
||||||
+++ b/src/gui/painting/qwindowsurface_raster.cpp
|
|
||||||
@@ -256,7 +256,7 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi
|
|
||||||
{
|
|
||||||
int depth = widget->x11Info().depth();
|
|
||||||
const QImage &src = d->image->image;
|
|
||||||
- if (src.format() != QImage::Format_RGB32 || depth < 24 || X11->bppForDepth.value(depth) != 32) {
|
|
||||||
+ if (src.format() != QImage::Format_RGB32 || (depth != 24 && depth != 32) || X11->bppForDepth.value(depth) != 32) {
|
|
||||||
Q_ASSERT(src.depth() >= 16);
|
|
||||||
const QImage sub_src(src.scanLine(br.y()) + br.x() * (uint(src.depth()) / 8),
|
|
||||||
br.width(), br.height(), src.bytesPerLine(), src.format());
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,137 +0,0 @@
|
|||||||
From 59eb561989f7a7b65c3e9b11d0ac062479013bf2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Peter Hartmann <phartmann@blackberry.com>
|
|
||||||
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 <rich@kde.org>
|
|
||||||
---
|
|
||||||
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
|
|
||||||
|
|
@ -1,44 +0,0 @@
|
|||||||
From 6c3b032693acf86a894a8ea3a30c937a1d08ed7f Mon Sep 17 00:00:00 2001
|
|
||||||
From: aavit <eirik.aavitsland@digia.com>
|
|
||||||
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 <gunnar.sletta@jollamobile.com>
|
|
||||||
(cherry picked from qtbase/319cbb7597100f3b65792dc6a0ce2885ce6c0e8c)
|
|
||||||
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
|
|
||||||
---
|
|
||||||
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
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
|||||||
From 3633f35a607872108fdc3ce06914f7d42a4facdf Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Lisandro=20Dami=C3=A1n=20Nicanor=20P=C3=A9rez=20Meyer?=
|
|
||||||
<perezmeyer@gmail.com>
|
|
||||||
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] <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=749743#39>
|
|
||||||
|
|
||||||
Change-Id: I4cd204e314789337e34b460dda6e18143e3712ec
|
|
||||||
Reviewed-by: Dmitry Shachnev <mitya57@gmail.com>
|
|
||||||
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
|
|
||||||
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
|
|
||||||
---
|
|
||||||
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
|
|
||||||
|
|
@ -1,51 +0,0 @@
|
|||||||
From 93c137ea29f011a267e22fa644a40aba6e3e2d22 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Lisandro=20Dami=C3=A1n=20Nicanor=20P=C3=A9rez=20Meyer?=
|
|
||||||
<perezmeyer@gmail.com>
|
|
||||||
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:
|
|
||||||
<https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=735488#255>
|
|
||||||
|
|
||||||
Change-Id: Ic2171c03fca8bb871347940fa3a2bc467776f797
|
|
||||||
Reviewed-by: Dmitry Shachnev <mitya57@gmail.com>
|
|
||||||
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
|
|
||||||
---
|
|
||||||
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
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
From 80e3108f5cd1e1850ec81a21100d79a0946addd7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Miikka Heikkinen <miikka.heikkinen@digia.com>
|
|
||||||
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 <jiang.jiang@nokia.com>
|
|
||||||
(cherry picked from qtbase/2ea976c3a713535c2419d936d575e0b24545f0fa)
|
|
||||||
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
|
|
||||||
Reviewed-by: Lisandro Damián Nicanor Pérez Meyer <perezmeyer@gmail.com>
|
|
||||||
Reviewed-by: Jiang Jiang <gzjjgod@gmail.com>
|
|
||||||
---
|
|
||||||
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
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
|||||||
From e50aa2252cdd5cb53eef7d8c4503c7edff634f68 Mon Sep 17 00:00:00 2001
|
|
||||||
From: "Richard J. Moore" <rich@kde.org>
|
|
||||||
Date: Tue, 24 Feb 2015 19:02:35 +0000
|
|
||||||
Subject: [PATCH 137/138] Fix a division by zero when processing malformed BMP
|
|
||||||
files.
|
|
||||||
|
|
||||||
This fixes a division by 0 when processing a maliciously crafted BMP
|
|
||||||
file. No impact beyond DoS.
|
|
||||||
|
|
||||||
Backport of 661f6bfd032dacc62841037732816a583640e187
|
|
||||||
|
|
||||||
Task-number: QTBUG-44547
|
|
||||||
Change-Id: I43f06e752b11cb50669101460902a82b885ae618
|
|
||||||
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
|
|
||||||
---
|
|
||||||
src/gui/image/qbmphandler.cpp | 6 ++++++
|
|
||||||
1 file changed, 6 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/gui/image/qbmphandler.cpp b/src/gui/image/qbmphandler.cpp
|
|
||||||
index b22e842..30fa9e0 100644
|
|
||||||
--- a/src/gui/image/qbmphandler.cpp
|
|
||||||
+++ b/src/gui/image/qbmphandler.cpp
|
|
||||||
@@ -319,10 +319,16 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, int offset, int
|
|
||||||
}
|
|
||||||
} else if (comp == BMP_BITFIELDS && (nbits == 16 || nbits == 32)) {
|
|
||||||
red_shift = calc_shift(red_mask);
|
|
||||||
+ if (((red_mask >> red_shift) + 1) == 0)
|
|
||||||
+ return false;
|
|
||||||
red_scale = 256 / ((red_mask >> red_shift) + 1);
|
|
||||||
green_shift = calc_shift(green_mask);
|
|
||||||
+ if (((green_mask >> green_shift) + 1) == 0)
|
|
||||||
+ return false;
|
|
||||||
green_scale = 256 / ((green_mask >> green_shift) + 1);
|
|
||||||
blue_shift = calc_shift(blue_mask);
|
|
||||||
+ if (((blue_mask >> blue_shift) + 1) == 0)
|
|
||||||
+ return false;
|
|
||||||
blue_scale = 256 / ((blue_mask >> blue_shift) + 1);
|
|
||||||
} else if (comp == BMP_RGB && (nbits == 24 || nbits == 32)) {
|
|
||||||
blue_mask = 0x000000ff;
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,434 +0,0 @@
|
|||||||
From fa81aa6d027049e855b76f5408586a288f160575 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Markus Goetz <markus@woboq.com>
|
|
||||||
Date: Tue, 28 Apr 2015 11:57:36 +0200
|
|
||||||
Subject: [PATCH 163/163] QNAM: Fix upload corruptions when server closes
|
|
||||||
connection
|
|
||||||
|
|
||||||
This patch fixes several upload corruptions if the server closes the connection
|
|
||||||
while/before we send data into it. They happen inside multiple places in the HTTP
|
|
||||||
layer and are explained in the comments.
|
|
||||||
Corruptions are:
|
|
||||||
* The upload byte device has an in-flight signal with pending upload data, if
|
|
||||||
it gets reset (because server closes the connection) then the re-send of the
|
|
||||||
request was sometimes taking this stale in-flight pending upload data.
|
|
||||||
* Because some signals were DirectConnection and some were QueuedConnection, there
|
|
||||||
was a chance that a direct signal overtakes a queued signal. The state machine
|
|
||||||
then sent data down the socket which was buffered there (and sent later) although
|
|
||||||
it did not match the current state of the state machine when it was actually sent.
|
|
||||||
* A socket was seen as being able to have requests sent even though it was not
|
|
||||||
encrypted yet. This relates to the previous corruption where data is stored inside
|
|
||||||
the socket's buffer and then sent later.
|
|
||||||
|
|
||||||
The included auto test produces all fixed corruptions, I detected no regressions
|
|
||||||
via the other tests.
|
|
||||||
This code also adds a bit of sanity checking to protect from possible further
|
|
||||||
problems.
|
|
||||||
|
|
||||||
[ChangeLog][QtNetwork] Fix HTTP(s) upload corruption when server closes connection
|
|
||||||
|
|
||||||
(cherry picked from commit qtbase/cff39fba10ffc10ee4dcfdc66ff6528eb26462d3)
|
|
||||||
Change-Id: I9793297be6cf3edfb75b65ba03b65f7a133ef194
|
|
||||||
Reviewed-by: Richard J. Moore <rich@kde.org>
|
|
||||||
---
|
|
||||||
src/corelib/io/qnoncontiguousbytedevice.cpp | 19 +++
|
|
||||||
src/corelib/io/qnoncontiguousbytedevice_p.h | 4 +
|
|
||||||
.../access/qhttpnetworkconnectionchannel.cpp | 47 +++++-
|
|
||||||
src/network/access/qhttpthreaddelegate_p.h | 36 ++++-
|
|
||||||
src/network/access/qnetworkaccesshttpbackend.cpp | 24 ++-
|
|
||||||
src/network/access/qnetworkaccesshttpbackend_p.h | 5 +-
|
|
||||||
tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 174 ++++++++++++++++++++-
|
|
||||||
7 files changed, 280 insertions(+), 29 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/corelib/io/qnoncontiguousbytedevice.cpp b/src/corelib/io/qnoncontiguousbytedevice.cpp
|
|
||||||
index bf58eee..1a0591e 100644
|
|
||||||
--- a/src/corelib/io/qnoncontiguousbytedevice.cpp
|
|
||||||
+++ b/src/corelib/io/qnoncontiguousbytedevice.cpp
|
|
||||||
@@ -245,6 +245,12 @@ qint64 QNonContiguousByteDeviceByteArrayImpl::size()
|
|
||||||
return byteArray->size();
|
|
||||||
}
|
|
||||||
|
|
||||||
+qint64 QNonContiguousByteDeviceByteArrayImpl::pos()
|
|
||||||
+{
|
|
||||||
+ return currentPosition;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
QNonContiguousByteDeviceRingBufferImpl::QNonContiguousByteDeviceRingBufferImpl(QSharedPointer<QRingBuffer> rb)
|
|
||||||
: QNonContiguousByteDevice(), currentPosition(0)
|
|
||||||
{
|
|
||||||
@@ -296,6 +302,11 @@ qint64 QNonContiguousByteDeviceRingBufferImpl::size()
|
|
||||||
return ringBuffer->size();
|
|
||||||
}
|
|
||||||
|
|
||||||
+qint64 QNonContiguousByteDeviceRingBufferImpl::pos()
|
|
||||||
+{
|
|
||||||
+ return currentPosition;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
QNonContiguousByteDeviceIoDeviceImpl::QNonContiguousByteDeviceIoDeviceImpl(QIODevice *d)
|
|
||||||
: QNonContiguousByteDevice(),
|
|
||||||
currentReadBuffer(0), currentReadBufferSize(16*1024),
|
|
||||||
@@ -415,6 +426,14 @@ qint64 QNonContiguousByteDeviceIoDeviceImpl::size()
|
|
||||||
return device->size() - initialPosition;
|
|
||||||
}
|
|
||||||
|
|
||||||
+qint64 QNonContiguousByteDeviceIoDeviceImpl::pos()
|
|
||||||
+{
|
|
||||||
+ if (device->isSequential())
|
|
||||||
+ return -1;
|
|
||||||
+
|
|
||||||
+ return device->pos();
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
QByteDeviceWrappingIoDevice::QByteDeviceWrappingIoDevice(QNonContiguousByteDevice *bd) : QIODevice((QObject*)0)
|
|
||||||
{
|
|
||||||
byteDevice = bd;
|
|
||||||
diff --git a/src/corelib/io/qnoncontiguousbytedevice_p.h b/src/corelib/io/qnoncontiguousbytedevice_p.h
|
|
||||||
index b6966eb..d1a99a1 100644
|
|
||||||
--- a/src/corelib/io/qnoncontiguousbytedevice_p.h
|
|
||||||
+++ b/src/corelib/io/qnoncontiguousbytedevice_p.h
|
|
||||||
@@ -69,6 +69,7 @@ public:
|
|
||||||
virtual const char* readPointer(qint64 maximumLength, qint64 &len) = 0;
|
|
||||||
virtual bool advanceReadPointer(qint64 amount) = 0;
|
|
||||||
virtual bool atEnd() = 0;
|
|
||||||
+ virtual qint64 pos() { return -1; }
|
|
||||||
virtual bool reset() = 0;
|
|
||||||
void disableReset();
|
|
||||||
bool isResetDisabled() { return resetDisabled; }
|
|
||||||
@@ -108,6 +109,7 @@ public:
|
|
||||||
bool atEnd();
|
|
||||||
bool reset();
|
|
||||||
qint64 size();
|
|
||||||
+ qint64 pos();
|
|
||||||
protected:
|
|
||||||
QByteArray* byteArray;
|
|
||||||
qint64 currentPosition;
|
|
||||||
@@ -123,6 +125,7 @@ public:
|
|
||||||
bool atEnd();
|
|
||||||
bool reset();
|
|
||||||
qint64 size();
|
|
||||||
+ qint64 pos();
|
|
||||||
protected:
|
|
||||||
QSharedPointer<QRingBuffer> ringBuffer;
|
|
||||||
qint64 currentPosition;
|
|
||||||
@@ -140,6 +143,7 @@ public:
|
|
||||||
bool atEnd();
|
|
||||||
bool reset();
|
|
||||||
qint64 size();
|
|
||||||
+ qint64 pos();
|
|
||||||
protected:
|
|
||||||
QIODevice* device;
|
|
||||||
QByteArray* currentReadBuffer;
|
|
||||||
diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp
|
|
||||||
index 550e090..db2f712 100644
|
|
||||||
--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
|
|
||||||
+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
|
|
||||||
@@ -107,15 +107,19 @@ void QHttpNetworkConnectionChannel::init()
|
|
||||||
socket->setProxy(QNetworkProxy::NoProxy);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+ // We want all signals (except the interactive ones) be connected as QueuedConnection
|
|
||||||
+ // because else we're falling into cases where we recurse back into the socket code
|
|
||||||
+ // and mess up the state. Always going to the event loop (and expecting that when reading/writing)
|
|
||||||
+ // is safer.
|
|
||||||
QObject::connect(socket, SIGNAL(bytesWritten(qint64)),
|
|
||||||
this, SLOT(_q_bytesWritten(qint64)),
|
|
||||||
- Qt::DirectConnection);
|
|
||||||
+ Qt::QueuedConnection);
|
|
||||||
QObject::connect(socket, SIGNAL(connected()),
|
|
||||||
this, SLOT(_q_connected()),
|
|
||||||
- Qt::DirectConnection);
|
|
||||||
+ Qt::QueuedConnection);
|
|
||||||
QObject::connect(socket, SIGNAL(readyRead()),
|
|
||||||
this, SLOT(_q_readyRead()),
|
|
||||||
- Qt::DirectConnection);
|
|
||||||
+ Qt::QueuedConnection);
|
|
||||||
|
|
||||||
// The disconnected() and error() signals may already come
|
|
||||||
// while calling connectToHost().
|
|
||||||
@@ -144,13 +148,13 @@ void QHttpNetworkConnectionChannel::init()
|
|
||||||
// won't be a sslSocket if encrypt is false
|
|
||||||
QObject::connect(sslSocket, SIGNAL(encrypted()),
|
|
||||||
this, SLOT(_q_encrypted()),
|
|
||||||
- Qt::DirectConnection);
|
|
||||||
+ Qt::QueuedConnection);
|
|
||||||
QObject::connect(sslSocket, SIGNAL(sslErrors(QList<QSslError>)),
|
|
||||||
this, SLOT(_q_sslErrors(QList<QSslError>)),
|
|
||||||
Qt::DirectConnection);
|
|
||||||
QObject::connect(sslSocket, SIGNAL(encryptedBytesWritten(qint64)),
|
|
||||||
this, SLOT(_q_encryptedBytesWritten(qint64)),
|
|
||||||
- Qt::DirectConnection);
|
|
||||||
+ Qt::QueuedConnection);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
@@ -163,7 +167,8 @@ void QHttpNetworkConnectionChannel::close()
|
|
||||||
else
|
|
||||||
state = QHttpNetworkConnectionChannel::ClosingState;
|
|
||||||
|
|
||||||
- socket->close();
|
|
||||||
+ if (socket)
|
|
||||||
+ socket->close();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -280,6 +285,14 @@ bool QHttpNetworkConnectionChannel::sendRequest()
|
|
||||||
// nothing to read currently, break the loop
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
+ if (written != uploadByteDevice->pos()) {
|
|
||||||
+ // Sanity check. This was useful in tracking down an upload corruption.
|
|
||||||
+ qWarning() << "QHttpProtocolHandler: Internal error in sendRequest. Expected to write at position" << written << "but read device is at" << uploadByteDevice->pos();
|
|
||||||
+ Q_ASSERT(written == uploadByteDevice->pos());
|
|
||||||
+ connection->d_func()->emitReplyError(socket, reply, QNetworkReply::ProtocolFailure);
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
qint64 currentWriteSize = socket->write(readPointer, currentReadSize);
|
|
||||||
if (currentWriteSize == -1 || currentWriteSize != currentReadSize) {
|
|
||||||
// socket broke down
|
|
||||||
@@ -639,6 +652,14 @@ bool QHttpNetworkConnectionChannel::ensureConnection()
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ // This code path for ConnectedState
|
|
||||||
+ if (pendingEncrypt) {
|
|
||||||
+ // Let's only be really connected when we have received the encrypted() signal. Else the state machine seems to mess up
|
|
||||||
+ // and corrupt the things sent to the server.
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -980,6 +1001,13 @@ void QHttpNetworkConnectionChannel::_q_readyRead()
|
|
||||||
void QHttpNetworkConnectionChannel::_q_bytesWritten(qint64 bytes)
|
|
||||||
{
|
|
||||||
Q_UNUSED(bytes);
|
|
||||||
+
|
|
||||||
+ if (ssl) {
|
|
||||||
+ // In the SSL case we want to send data from encryptedBytesWritten signal since that one
|
|
||||||
+ // is the one going down to the actual network, not only into some SSL buffer.
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
// bytes have been written to the socket. write even more of them :)
|
|
||||||
if (isSocketWriting())
|
|
||||||
sendRequest();
|
|
||||||
@@ -1029,7 +1057,7 @@ void QHttpNetworkConnectionChannel::_q_connected()
|
|
||||||
|
|
||||||
// ### FIXME: if the server closes the connection unexpectedly, we shouldn't send the same broken request again!
|
|
||||||
//channels[i].reconnectAttempts = 2;
|
|
||||||
- if (!pendingEncrypt) {
|
|
||||||
+ if (!pendingEncrypt && !ssl) { // FIXME: Didn't work properly with pendingEncrypt only, we should refactor this into an EncrypingState
|
|
||||||
state = QHttpNetworkConnectionChannel::IdleState;
|
|
||||||
if (!reply)
|
|
||||||
connection->d_func()->dequeueRequest(socket);
|
|
||||||
@@ -1157,7 +1185,10 @@ void QHttpNetworkConnectionChannel::_q_proxyAuthenticationRequired(const QNetwor
|
|
||||||
|
|
||||||
void QHttpNetworkConnectionChannel::_q_uploadDataReadyRead()
|
|
||||||
{
|
|
||||||
- sendRequest();
|
|
||||||
+ if (reply && state == QHttpNetworkConnectionChannel::WritingState) {
|
|
||||||
+ // There might be timing issues, make sure to only send upload data if really in that state
|
|
||||||
+ sendRequest();
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef QT_NO_OPENSSL
|
|
||||||
diff --git a/src/network/access/qhttpthreaddelegate_p.h b/src/network/access/qhttpthreaddelegate_p.h
|
|
||||||
index 7648325..9dd0deb 100644
|
|
||||||
--- a/src/network/access/qhttpthreaddelegate_p.h
|
|
||||||
+++ b/src/network/access/qhttpthreaddelegate_p.h
|
|
||||||
@@ -190,6 +190,7 @@ protected:
|
|
||||||
QByteArray m_dataArray;
|
|
||||||
bool m_atEnd;
|
|
||||||
qint64 m_size;
|
|
||||||
+ qint64 m_pos; // to match calls of haveDataSlot with the expected position
|
|
||||||
public:
|
|
||||||
QNonContiguousByteDeviceThreadForwardImpl(bool aE, qint64 s)
|
|
||||||
: QNonContiguousByteDevice(),
|
|
||||||
@@ -197,7 +198,8 @@ public:
|
|
||||||
m_amount(0),
|
|
||||||
m_data(0),
|
|
||||||
m_atEnd(aE),
|
|
||||||
- m_size(s)
|
|
||||||
+ m_size(s),
|
|
||||||
+ m_pos(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -205,6 +207,11 @@ public:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
+ qint64 pos()
|
|
||||||
+ {
|
|
||||||
+ return m_pos;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
const char* readPointer(qint64 maximumLength, qint64 &len)
|
|
||||||
{
|
|
||||||
if (m_amount > 0) {
|
|
||||||
@@ -232,11 +239,10 @@ public:
|
|
||||||
|
|
||||||
m_amount -= a;
|
|
||||||
m_data += a;
|
|
||||||
+ m_pos += a;
|
|
||||||
|
|
||||||
- // To main thread to inform about our state
|
|
||||||
- emit processedData(a);
|
|
||||||
-
|
|
||||||
- // FIXME possible optimization, already ask user thread for some data
|
|
||||||
+ // To main thread to inform about our state. The m_pos will be sent as a sanity check.
|
|
||||||
+ emit processedData(m_pos, a);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
@@ -253,10 +259,21 @@ public:
|
|
||||||
{
|
|
||||||
m_amount = 0;
|
|
||||||
m_data = 0;
|
|
||||||
+ m_dataArray.clear();
|
|
||||||
+
|
|
||||||
+ if (wantDataPending) {
|
|
||||||
+ // had requested the user thread to send some data (only 1 in-flight at any moment)
|
|
||||||
+ wantDataPending = false;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
// Communicate as BlockingQueuedConnection
|
|
||||||
bool b = false;
|
|
||||||
emit resetData(&b);
|
|
||||||
+ if (b) {
|
|
||||||
+ // the reset succeeded, we're at pos 0 again
|
|
||||||
+ m_pos = 0;
|
|
||||||
+ // the HTTP code will anyway abort the request if !b.
|
|
||||||
+ }
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -267,8 +284,13 @@ public:
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
// From user thread:
|
|
||||||
- void haveDataSlot(QByteArray dataArray, bool dataAtEnd, qint64 dataSize)
|
|
||||||
+ void haveDataSlot(qint64 pos, QByteArray dataArray, bool dataAtEnd, qint64 dataSize)
|
|
||||||
{
|
|
||||||
+ if (pos != m_pos) {
|
|
||||||
+ // Sometimes when re-sending a request in the qhttpnetwork* layer there is a pending haveData from the
|
|
||||||
+ // user thread on the way to us. We need to ignore it since it is the data for the wrong(later) chunk.
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
wantDataPending = false;
|
|
||||||
|
|
||||||
m_dataArray = dataArray;
|
|
||||||
@@ -288,7 +310,7 @@ signals:
|
|
||||||
|
|
||||||
// to main thread:
|
|
||||||
void wantData(qint64);
|
|
||||||
- void processedData(qint64);
|
|
||||||
+ void processedData(qint64 pos, qint64 amount);
|
|
||||||
void resetData(bool *b);
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp
|
|
||||||
index cc67258..fe2f627 100644
|
|
||||||
--- a/src/network/access/qnetworkaccesshttpbackend.cpp
|
|
||||||
+++ b/src/network/access/qnetworkaccesshttpbackend.cpp
|
|
||||||
@@ -193,6 +193,7 @@ QNetworkAccessHttpBackendFactory::create(QNetworkAccessManager::Operation op,
|
|
||||||
QNetworkAccessHttpBackend::QNetworkAccessHttpBackend()
|
|
||||||
: QNetworkAccessBackend()
|
|
||||||
, statusCode(0)
|
|
||||||
+ , uploadByteDevicePosition(false)
|
|
||||||
, pendingDownloadDataEmissions(new QAtomicInt())
|
|
||||||
, pendingDownloadProgressEmissions(new QAtomicInt())
|
|
||||||
, loadingFromCache(false)
|
|
||||||
@@ -610,9 +611,9 @@ void QNetworkAccessHttpBackend::postRequest()
|
|
||||||
forwardUploadDevice->setParent(delegate); // needed to make sure it is moved on moveToThread()
|
|
||||||
delegate->httpRequest.setUploadByteDevice(forwardUploadDevice);
|
|
||||||
|
|
||||||
- // From main thread to user thread:
|
|
||||||
- QObject::connect(this, SIGNAL(haveUploadData(QByteArray, bool, qint64)),
|
|
||||||
- forwardUploadDevice, SLOT(haveDataSlot(QByteArray, bool, qint64)), Qt::QueuedConnection);
|
|
||||||
+ // From user thread to http thread:
|
|
||||||
+ QObject::connect(this, SIGNAL(haveUploadData(qint64,QByteArray,bool,qint64)),
|
|
||||||
+ forwardUploadDevice, SLOT(haveDataSlot(qint64,QByteArray,bool,qint64)), Qt::QueuedConnection);
|
|
||||||
QObject::connect(uploadByteDevice.data(), SIGNAL(readyRead()),
|
|
||||||
forwardUploadDevice, SIGNAL(readyRead()),
|
|
||||||
Qt::QueuedConnection);
|
|
||||||
@@ -620,8 +621,8 @@ void QNetworkAccessHttpBackend::postRequest()
|
|
||||||
// From http thread to user thread:
|
|
||||||
QObject::connect(forwardUploadDevice, SIGNAL(wantData(qint64)),
|
|
||||||
this, SLOT(wantUploadDataSlot(qint64)));
|
|
||||||
- QObject::connect(forwardUploadDevice, SIGNAL(processedData(qint64)),
|
|
||||||
- this, SLOT(sentUploadDataSlot(qint64)));
|
|
||||||
+ QObject::connect(forwardUploadDevice,SIGNAL(processedData(qint64, qint64)),
|
|
||||||
+ this, SLOT(sentUploadDataSlot(qint64,qint64)));
|
|
||||||
connect(forwardUploadDevice, SIGNAL(resetData(bool*)),
|
|
||||||
this, SLOT(resetUploadDataSlot(bool*)),
|
|
||||||
Qt::BlockingQueuedConnection); // this is the only one with BlockingQueued!
|
|
||||||
@@ -915,12 +916,21 @@ void QNetworkAccessHttpBackend::replySslConfigurationChanged(const QSslConfigura
|
|
||||||
void QNetworkAccessHttpBackend::resetUploadDataSlot(bool *r)
|
|
||||||
{
|
|
||||||
*r = uploadByteDevice->reset();
|
|
||||||
+ if (*r) {
|
|
||||||
+ // reset our own position which is used for the inter-thread communication
|
|
||||||
+ uploadByteDevicePosition = 0;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
// Coming from QNonContiguousByteDeviceThreadForwardImpl in HTTP thread
|
|
||||||
-void QNetworkAccessHttpBackend::sentUploadDataSlot(qint64 amount)
|
|
||||||
+void QNetworkAccessHttpBackend::sentUploadDataSlot(qint64 pos, qint64 amount)
|
|
||||||
{
|
|
||||||
+ if (uploadByteDevicePosition + amount != pos) {
|
|
||||||
+ // Sanity check, should not happen.
|
|
||||||
+ error(QNetworkReply::UnknownNetworkError, "");
|
|
||||||
+ }
|
|
||||||
uploadByteDevice->advanceReadPointer(amount);
|
|
||||||
+ uploadByteDevicePosition += amount;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Coming from QNonContiguousByteDeviceThreadForwardImpl in HTTP thread
|
|
||||||
@@ -933,7 +943,7 @@ void QNetworkAccessHttpBackend::wantUploadDataSlot(qint64 maxSize)
|
|
||||||
QByteArray dataArray(data, currentUploadDataLength);
|
|
||||||
|
|
||||||
// Communicate back to HTTP thread
|
|
||||||
- emit haveUploadData(dataArray, uploadByteDevice->atEnd(), uploadByteDevice->size());
|
|
||||||
+ emit haveUploadData(uploadByteDevicePosition, dataArray, uploadByteDevice->atEnd(), uploadByteDevice->size());
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
diff --git a/src/network/access/qnetworkaccesshttpbackend_p.h b/src/network/access/qnetworkaccesshttpbackend_p.h
|
|
||||||
index 13519c6..b4ed67c 100644
|
|
||||||
--- a/src/network/access/qnetworkaccesshttpbackend_p.h
|
|
||||||
+++ b/src/network/access/qnetworkaccesshttpbackend_p.h
|
|
||||||
@@ -112,7 +112,7 @@ signals:
|
|
||||||
|
|
||||||
void startHttpRequestSynchronously();
|
|
||||||
|
|
||||||
- void haveUploadData(QByteArray dataArray, bool dataAtEnd, qint64 dataSize);
|
|
||||||
+ void haveUploadData(const qint64 pos, QByteArray dataArray, bool dataAtEnd, qint64 dataSize);
|
|
||||||
private slots:
|
|
||||||
// From HTTP thread:
|
|
||||||
void replyDownloadData(QByteArray);
|
|
||||||
@@ -129,13 +129,14 @@ private slots:
|
|
||||||
// From QNonContiguousByteDeviceThreadForwardImpl in HTTP thread:
|
|
||||||
void resetUploadDataSlot(bool *r);
|
|
||||||
void wantUploadDataSlot(qint64);
|
|
||||||
- void sentUploadDataSlot(qint64);
|
|
||||||
+ void sentUploadDataSlot(qint64, qint64);
|
|
||||||
|
|
||||||
bool sendCacheContents(const QNetworkCacheMetaData &metaData);
|
|
||||||
|
|
||||||
private:
|
|
||||||
QHttpNetworkRequest httpRequest; // There is also a copy in the HTTP thread
|
|
||||||
int statusCode;
|
|
||||||
+ qint64 uploadByteDevicePosition;
|
|
||||||
QString reasonPhrase;
|
|
||||||
// Will be increased by HTTP thread:
|
|
||||||
QSharedPointer<QAtomicInt> pendingDownloadDataEmissions;
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,54 +0,0 @@
|
|||||||
diff -up qt-everywhere-opensource-src-4.8.6/src/gui/image/qbmphandler.cpp.than qt-everywhere-opensource-src-4.8.6/src/gui/image/qbmphandler.cpp
|
|
||||||
--- qt-everywhere-opensource-src-4.8.6/src/gui/image/qbmphandler.cpp.than 2015-04-13 16:03:24.347475762 +0200
|
|
||||||
+++ qt-everywhere-opensource-src-4.8.6/src/gui/image/qbmphandler.cpp 2015-04-13 16:04:42.781923479 +0200
|
|
||||||
@@ -478,12 +478,6 @@ static bool read_dib_body(QDataStream &s
|
|
||||||
p = data + (h-y-1)*bpl;
|
|
||||||
break;
|
|
||||||
case 2: // delta (jump)
|
|
||||||
- // Protection
|
|
||||||
- if ((uint)x >= (uint)w)
|
|
||||||
- x = w-1;
|
|
||||||
- if ((uint)y >= (uint)h)
|
|
||||||
- y = h-1;
|
|
||||||
-
|
|
||||||
{
|
|
||||||
quint8 tmp;
|
|
||||||
d->getChar((char *)&tmp);
|
|
||||||
@@ -491,6 +485,13 @@ static bool read_dib_body(QDataStream &s
|
|
||||||
d->getChar((char *)&tmp);
|
|
||||||
y += tmp;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ // Protection
|
|
||||||
+ if ((uint)x >= (uint)w)
|
|
||||||
+ x = w-1;
|
|
||||||
+ if ((uint)y >= (uint)h)
|
|
||||||
+ y = h-1;
|
|
||||||
+
|
|
||||||
p = data + (h-y-1)*bpl + x;
|
|
||||||
break;
|
|
||||||
default: // absolute mode
|
|
||||||
diff -up qt-everywhere-opensource-src-4.8.6/src/gui/image/qgifhandler.cpp.than qt-everywhere-opensource-src-4.8.6/src/gui/image/qgifhandler.cpp
|
|
||||||
--- qt-everywhere-opensource-src-4.8.6/src/gui/image/qgifhandler.cpp.than 2015-04-13 16:10:38.284420268 +0200
|
|
||||||
+++ qt-everywhere-opensource-src-4.8.6/src/gui/image/qgifhandler.cpp 2015-04-13 16:11:17.406144797 +0200
|
|
||||||
@@ -944,6 +944,8 @@ void QGIFFormat::fillRect(QImage *image,
|
|
||||||
|
|
||||||
void QGIFFormat::nextY(unsigned char *bits, int bpl)
|
|
||||||
{
|
|
||||||
+ if (out_of_bounds)
|
|
||||||
+ return;
|
|
||||||
int my;
|
|
||||||
switch (interlace) {
|
|
||||||
case 0: // Non-interlaced
|
|
||||||
diff -up qt-everywhere-opensource-src-4.8.6/src/plugins/imageformats/ico/qicohandler.cpp.than qt-everywhere-opensource-src-4.8.6/src/plugins/imageformats/ico/qicohandler.cpp
|
|
||||||
--- qt-everywhere-opensource-src-4.8.6/src/plugins/imageformats/ico/qicohandler.cpp.than 2015-04-13 16:05:02.059787728 +0200
|
|
||||||
+++ qt-everywhere-opensource-src-4.8.6/src/plugins/imageformats/ico/qicohandler.cpp 2015-04-13 16:05:41.141512553 +0200
|
|
||||||
@@ -571,7 +571,7 @@ QImage ICOReader::iconAt(int index)
|
|
||||||
QImage::Format format = QImage::Format_ARGB32;
|
|
||||||
if (icoAttrib.nbits == 24)
|
|
||||||
format = QImage::Format_RGB32;
|
|
||||||
- else if (icoAttrib.ncolors == 2)
|
|
||||||
+ else if (icoAttrib.ncolors == 2 && icoAttrib.depth == 1)
|
|
||||||
format = QImage::Format_Mono;
|
|
||||||
else if (icoAttrib.ncolors > 0)
|
|
||||||
format = QImage::Format_Indexed8;
|
|
File diff suppressed because one or more lines are too long
@ -1,24 +0,0 @@
|
|||||||
diff -up qt-everywhere-opensource-src-4.8.6/configure.fix_detection_of_gcc5 qt-everywhere-opensource-src-4.8.6/configure
|
|
||||||
--- qt-everywhere-opensource-src-4.8.6/configure.fix_detection_of_gcc5 2014-04-10 13:37:08.000000000 -0500
|
|
||||||
+++ qt-everywhere-opensource-src-4.8.6/configure 2015-02-16 08:36:16.363785377 -0600
|
|
||||||
@@ -7729,7 +7729,7 @@ case "$XPLATFORM" in
|
|
||||||
*-g++*)
|
|
||||||
# Check gcc's version
|
|
||||||
case "$(${QMAKE_CONF_COMPILER} -dumpversion)" in
|
|
||||||
- 4*|3.4*)
|
|
||||||
+ 5*|4*|3.4*)
|
|
||||||
;;
|
|
||||||
3.3*)
|
|
||||||
canBuildWebKit="no"
|
|
||||||
@@ -8031,6 +8031,11 @@ g++*)
|
|
||||||
QT_GCC_MINOR_VERSION=`echo $COMPILER_VERSION | sed 's,^\([0-9]*\)\.\([0-9]*\).*,\2,'`
|
|
||||||
QT_GCC_PATCH_VERSION=0
|
|
||||||
;;
|
|
||||||
+ *)
|
|
||||||
+ QT_GCC_MAJOR_VERSION=$COMPILER_VERSION
|
|
||||||
+ QT_GCC_MINOR_VERSION=0
|
|
||||||
+ QT_GCC_PATCH_VERSION=0
|
|
||||||
+ ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case "$COMPILER_VERSION" in
|
|
@ -1,12 +0,0 @@
|
|||||||
diff -up qt-everywhere-opensource-src-4.8.6/configure.qt_build_key qt-everywhere-opensource-src-4.8.6/configure
|
|
||||||
--- qt-everywhere-opensource-src-4.8.6/configure.qt_build_key 2015-02-16 08:00:01.698531648 -0600
|
|
||||||
+++ qt-everywhere-opensource-src-4.8.6/configure 2015-02-16 08:06:43.198794608 -0600
|
|
||||||
@@ -8044,7 +8044,7 @@ g++*)
|
|
||||||
3.*)
|
|
||||||
COMPILER_VERSION="3.*"
|
|
||||||
;;
|
|
||||||
- 4.*)
|
|
||||||
+ 5.*|4.*)
|
|
||||||
COMPILER_VERSION="4"
|
|
||||||
;;
|
|
||||||
*)
|
|
60
qt.spec
60
qt.spec
@ -31,18 +31,20 @@
|
|||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%define beta rc2
|
||||||
|
|
||||||
Summary: Qt toolkit
|
Summary: Qt toolkit
|
||||||
Name: qt
|
Name: qt
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Version: 4.8.6
|
Version: 4.8.7
|
||||||
Release: 30%{?dist}
|
Release: 0.1.%{beta}%{?dist}
|
||||||
|
|
||||||
# See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details
|
# 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
|
License: (LGPLv2 with exceptions or GPLv3 with exceptions) and ASL 2.0 and BSD and FTL and MIT
|
||||||
Group: System Environment/Libraries
|
Group: System Environment/Libraries
|
||||||
Url: http://qt-project.org/
|
Url: http://qt-project.org/
|
||||||
%if 0%{?pre:1}
|
%if 0%{?beta:1}
|
||||||
Source0: http://download.qt-project.org/development_releases/qt/4.8/%{version}-%{pre}/qt-everywhere-opensource-src-%{version}-%{pre}.tar.gz
|
Source0: http://download.qt-project.org/development_releases/qt/4.8/%{version}-%{beta}/qt-everywhere-opensource-src-%{version}-%{beta}.tar.gz
|
||||||
%else
|
%else
|
||||||
Source0: http://download.qt-project.org/official_releases/qt/4.8/%{version}/qt-everywhere-opensource-src-%{version}.tar.gz
|
Source0: http://download.qt-project.org/official_releases/qt/4.8/%{version}/qt-everywhere-opensource-src-%{version}.tar.gz
|
||||||
%endif
|
%endif
|
||||||
@ -98,14 +100,6 @@ Patch28: qt-everywhere-opensource-src-4.8.5-qt_plugin_path.patch
|
|||||||
# add support for pkgconfig's Requires.private to qmake
|
# add support for pkgconfig's Requires.private to qmake
|
||||||
Patch50: qt-everywhere-opensource-src-4.8.4-qmake_pkgconfig_requires_private.patch
|
Patch50: qt-everywhere-opensource-src-4.8.4-qmake_pkgconfig_requires_private.patch
|
||||||
|
|
||||||
# backport part of 'Fix detection of GCC5'
|
|
||||||
# https://qt.gitorious.org/qt/qtbase/commit/9fb4c2c412621b63c06dbbd899f44041b2e126c2
|
|
||||||
Patch51: qt-fix_detection_of_gcc5.patch
|
|
||||||
|
|
||||||
# F22's gcc5 uses gcc4 ABI, so ensure QT_BUILD_KEY remains the same too
|
|
||||||
# TODO: ask upstream how to handle gcc5 moving forward, use g++-5 or not?
|
|
||||||
Patch52: qt-gcc5_compat_qt_build_key.patch
|
|
||||||
|
|
||||||
# fix invalid inline assembly in qatomic_{i386,x86_64}.h (de)ref implementations
|
# fix invalid inline assembly in qatomic_{i386,x86_64}.h (de)ref implementations
|
||||||
Patch53: qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch
|
Patch53: qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch
|
||||||
|
|
||||||
@ -184,24 +178,8 @@ Patch113: qt-everywhere-opensource-src-4.8.6-QTBUG-22829.patch
|
|||||||
Patch180: qt-aarch64.patch
|
Patch180: qt-aarch64.patch
|
||||||
|
|
||||||
## upstream git
|
## 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
|
|
||||||
Patch363: 0163-QNAM-Fix-upload-corruptions-when-server-closes-conne.patch
|
|
||||||
|
|
||||||
## security patches
|
## security patches
|
||||||
# CVE-2015-0295
|
|
||||||
# http://lists.qt-project.org/pipermail/announce/2015-February/000059.html
|
|
||||||
Patch337: 0137-Fix-a-division-by-zero-when-processing-malformed-BMP.patch
|
|
||||||
# CVE-2015-1860 CVE-2015-1859 CVE-2015-1858
|
|
||||||
Patch338: qt-4.8.6-CVE-2015-1860_CVE-2015-1859_CVE-2015-1858.patch
|
|
||||||
|
|
||||||
# desktop files
|
# desktop files
|
||||||
Source20: assistant.desktop
|
Source20: assistant.desktop
|
||||||
@ -560,8 +538,6 @@ rm -fv mkspecs/linux-g++*/qmake.conf.multilib-optflags
|
|||||||
%patch27 -p1 -b .qt3support_debuginfo
|
%patch27 -p1 -b .qt3support_debuginfo
|
||||||
%patch28 -p1 -b .qt_plugin_path
|
%patch28 -p1 -b .qt_plugin_path
|
||||||
%patch50 -p1 -b .qmake_pkgconfig_requires_private
|
%patch50 -p1 -b .qmake_pkgconfig_requires_private
|
||||||
%patch51 -p1 -b .fix_detection_of_gcc5
|
|
||||||
%patch52 -p1 -b .gcc5_compat_qt_build_key
|
|
||||||
## TODO: still worth carrying? if so, upstream it.
|
## TODO: still worth carrying? if so, upstream it.
|
||||||
%patch53 -p1 -b .qatomic-inline-asm
|
%patch53 -p1 -b .qatomic-inline-asm
|
||||||
## TODO: upstream me
|
## TODO: upstream me
|
||||||
@ -596,19 +572,6 @@ rm -rf src/3rdparty/clucene
|
|||||||
%patch180 -p1 -b .aarch64
|
%patch180 -p1 -b .aarch64
|
||||||
|
|
||||||
# upstream git
|
# 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
|
|
||||||
%patch337 -p1 -b .0137
|
|
||||||
%patch338 -p1 -b .CVE-2015-1860_CVE-2015-1859_CVE-2015-1858
|
|
||||||
%patch363 -p1 -b .0163
|
|
||||||
|
|
||||||
# security fixes
|
# security fixes
|
||||||
# regression fixes for the security fixes
|
# regression fixes for the security fixes
|
||||||
@ -776,7 +739,7 @@ done
|
|||||||
|
|
||||||
# nuke dangling reference(s) to %buildroot
|
# nuke dangling reference(s) to %buildroot
|
||||||
sed -i -e "/^QMAKE_PRL_BUILD_DIR/d" %{buildroot}%{_qt4_libdir}/*.prl
|
sed -i -e "/^QMAKE_PRL_BUILD_DIR/d" %{buildroot}%{_qt4_libdir}/*.prl
|
||||||
sed -i -e "s|-L%{_builddir}/qt-everywhere-opensource-src-%{version}%{?pre:-%{pre}}/lib||g" \
|
sed -i -e "s|-L%{_builddir}/qt-everywhere-opensource-src-%{version}%{?beta:-%{beta}}/lib||g" \
|
||||||
%{buildroot}%{_qt4_libdir}/pkgconfig/*.pc \
|
%{buildroot}%{_qt4_libdir}/pkgconfig/*.pc \
|
||||||
%{buildroot}%{_qt4_libdir}/*.prl
|
%{buildroot}%{_qt4_libdir}/*.prl
|
||||||
|
|
||||||
@ -1109,16 +1072,16 @@ fi
|
|||||||
%{_qt4_bindir}/qt*config*
|
%{_qt4_bindir}/qt*config*
|
||||||
%{_datadir}/applications/*qtconfig.desktop
|
%{_datadir}/applications/*qtconfig.desktop
|
||||||
|
|
||||||
|
%if 0%{?demos}
|
||||||
%files demos
|
%files demos
|
||||||
%defattr(-,root,root,-)
|
%defattr(-,root,root,-)
|
||||||
%if 0%{?demos}
|
|
||||||
%{_qt4_bindir}/qt*demo*
|
%{_qt4_bindir}/qt*demo*
|
||||||
%if "%{_qt4_bindir}" != "%{_bindir}"
|
%if "%{_qt4_bindir}" != "%{_bindir}"
|
||||||
%{_bindir}/qt*demo*
|
%{_bindir}/qt*demo*
|
||||||
%endif
|
%endif
|
||||||
%{_datadir}/applications/*qtdemo.desktop
|
%{_datadir}/applications/*qtdemo.desktop
|
||||||
%endif
|
|
||||||
%{_qt4_demosdir}/
|
%{_qt4_demosdir}/
|
||||||
|
%endif
|
||||||
|
|
||||||
%if "%{?webkit}" == "-webkit"
|
%if "%{?webkit}" == "-webkit"
|
||||||
%files designer-plugin-webkit
|
%files designer-plugin-webkit
|
||||||
@ -1245,9 +1208,11 @@ fi
|
|||||||
#{_qt4_prefix}/doc
|
#{_qt4_prefix}/doc
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%if 0%{?examples}
|
||||||
%files examples
|
%files examples
|
||||||
%defattr(-,root,root,-)
|
%defattr(-,root,root,-)
|
||||||
%{_qt4_examplesdir}/
|
%{_qt4_examplesdir}/
|
||||||
|
%endif
|
||||||
|
|
||||||
%if 0%{?qvfb}
|
%if 0%{?qvfb}
|
||||||
%files qvfb -f qvfb.lang
|
%files qvfb -f qvfb.lang
|
||||||
@ -1347,6 +1312,9 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri May 08 2015 Rex Dieter <rdieter@fedoraproject.org> 1:4.8.7-0.1.rc2
|
||||||
|
- qt-4.8.7-rc2
|
||||||
|
|
||||||
* Tue May 05 2015 Rex Dieter <rdieter@fedoraproject.org> 1:4.8.6-30
|
* Tue May 05 2015 Rex Dieter <rdieter@fedoraproject.org> 1:4.8.6-30
|
||||||
- backport: data corruption in QNetworkAccessManager
|
- backport: data corruption in QNetworkAccessManager
|
||||||
|
|
||||||
|
2
sources
2
sources
@ -1,3 +1,3 @@
|
|||||||
d9f511e4b51983b4e10eb58b320416d5 hi128-app-qt4-logo.png
|
d9f511e4b51983b4e10eb58b320416d5 hi128-app-qt4-logo.png
|
||||||
6dcc0672ff9e60a6b83f95c5f42bec5b hi48-app-qt4-logo.png
|
6dcc0672ff9e60a6b83f95c5f42bec5b hi48-app-qt4-logo.png
|
||||||
2edbe4d6c2eff33ef91732602f3518eb qt-everywhere-opensource-src-4.8.6.tar.gz
|
d990ee66bf7ab0c785589776f35ba6ad qt-everywhere-opensource-src-4.8.7-rc2.tar.gz
|
||||||
|
Loading…
Reference in New Issue
Block a user