[arch-commits] Commit in qt4/trunk (7 files)
Andrea Scarpino
andrea at nymeria.archlinux.org
Fri Apr 25 11:10:40 UTC 2014
Date: Friday, April 25, 2014 @ 13:10:40
Author: andrea
Revision: 211741
upgpkg: qt4 4.8.6-1
Upstream release
Added:
qt4/trunk/CVE-2014-0190.patch
Modified:
qt4/trunk/PKGBUILD
Deleted:
qt4/trunk/CVE-2013-4549.patch
qt4/trunk/libmng2.patch
qt4/trunk/qtbug-31579.patch
qt4/trunk/qtbug-32534.patch
qt4/trunk/qtbug-32908.patch
---------------------+
CVE-2013-4549.patch | 233 --------------------------------------------------
CVE-2014-0190.patch | 32 ++++++
PKGBUILD | 28 +-----
libmng2.patch | 35 -------
qtbug-31579.patch | 146 -------------------------------
qtbug-32534.patch | 40 --------
qtbug-32908.patch | 40 --------
7 files changed, 39 insertions(+), 515 deletions(-)
Deleted: CVE-2013-4549.patch
===================================================================
--- CVE-2013-4549.patch 2014-04-25 07:55:53 UTC (rev 211740)
+++ CVE-2013-4549.patch 2014-04-25 11:10:40 UTC (rev 211741)
@@ -1,233 +0,0 @@
-From 512a1ce0698d370c313bb561bbf078935fa0342e Mon Sep 17 00:00:00 2001
-From: Mitch Curtis <mitch.curtis at digia.com>
-Date: Thu, 7 Nov 2013 09:36:29 +0100
-Subject: [PATCH] Disallow deep or widely nested entity references.
-
-Nested references with a depth of 2 or greater will fail. References
-that partially expand to greater than 1024 characters will also fail.
-
-This is a backport of 46a8885ae486e238a39efa5119c2714f328b08e4.
-
-Change-Id: I0c2e1fa13d6ccb5f88641dae2ed3f28bfdeaf609
-Reviewed-by: Richard J. Moore <rich at kde.org>
-Reviewed-by: Lars Knoll <lars.knoll at digia.com>
-
-From cecceb0cdd87482124a73ecf537f3445d68be13e Mon Sep 17 00:00:00 2001
-From: Mitch Curtis <mitch.curtis at digia.com>
-Date: Tue, 12 Nov 2013 13:44:56 +0100
-Subject: [PATCH] Fully expand entities to ensure deep or widely nested ones fail parsing
-
-With 512a1ce0698d370c313bb561bbf078935fa0342e, we failed when parsing
-entities whose partially expanded size was greater than 1024
-characters. That was not enough, so now we fully expand all entities.
-
-This is a backport of f1053d94f59f053ce4acad9320df14f1fbe4faac.
-
-Change-Id: I41dd6f4525c63e82fd320a22d19248169627f7e0
-Reviewed-by: Richard J. Moore <rich at kde.org>
-
-diff --git a/src/xml/sax/qxml.cpp b/src/xml/sax/qxml.cpp
-index a1777c5..3904632 100644
---- a/src/xml/sax/qxml.cpp
-+++ b/src/xml/sax/qxml.cpp
-@@ -424,6 +424,10 @@ private:
- int stringValueLen;
- QString emptyStr;
-
-+ // The limit to the amount of times the DTD parsing functions can be called
-+ // for the DTD currently being parsed.
-+ int dtdRecursionLimit;
-+
- const QString &string();
- void stringClear();
- void stringAddC(QChar);
-@@ -492,6 +496,7 @@ private:
- void unexpectedEof(ParseFunction where, int state);
- void parseFailed(ParseFunction where, int state);
- void pushParseState(ParseFunction function, int state);
-+ bool isPartiallyExpandedEntityValueTooLarge(QString *errorMessage);
-
- Q_DECLARE_PUBLIC(QXmlSimpleReader)
- QXmlSimpleReader *q_ptr;
-@@ -2759,6 +2764,7 @@ QXmlSimpleReaderPrivate::QXmlSimpleReaderPrivate(QXmlSimpleReader *reader)
- useNamespacePrefixes = false;
- reportWhitespaceCharData = true;
- reportEntities = false;
-+ dtdRecursionLimit = 2;
- }
-
- QXmlSimpleReaderPrivate::~QXmlSimpleReaderPrivate()
-@@ -5018,6 +5024,11 @@ bool QXmlSimpleReaderPrivate::parseDoctype()
- }
- break;
- case Mup:
-+ if (dtdRecursionLimit > 0 && parameterEntities.size() > dtdRecursionLimit) {
-+ reportParseError(QString::fromLatin1(
-+ "DTD parsing exceeded recursion limit of %1.").arg(dtdRecursionLimit));
-+ return false;
-+ }
- if (!parseMarkupdecl()) {
- parseFailed(&QXmlSimpleReaderPrivate::parseDoctype, state);
- return false;
-@@ -6627,6 +6638,37 @@ bool QXmlSimpleReaderPrivate::parseChoiceSeq()
- return false;
- }
-
-+bool QXmlSimpleReaderPrivate::isPartiallyExpandedEntityValueTooLarge(QString *errorMessage)
-+{
-+ const QString value = string();
-+ QMap<QString, int> referencedEntityCounts;
-+ foreach (QString entityName, entities.keys()) {
-+ for (int i = 0; i < value.size() && i != -1; ) {
-+ i = value.indexOf(entityName, i);
-+ if (i != -1) {
-+ // The entityName we're currently trying to find
-+ // was matched in this string; increase our count.
-+ ++referencedEntityCounts[entityName];
-+ i += entityName.size();
-+ }
-+ }
-+ }
-+
-+ foreach (QString entityName, referencedEntityCounts.keys()) {
-+ const int timesReferenced = referencedEntityCounts[entityName];
-+ const QString entityValue = entities[entityName];
-+ if (entityValue.size() * timesReferenced > 1024) {
-+ if (errorMessage) {
-+ *errorMessage = QString::fromLatin1("The XML entity \"%1\""
-+ "expands too a string that is too large to process when "
-+ "referencing \"%2\" %3 times.").arg(entityName).arg(entityName).arg(timesReferenced);
-+ }
-+ return true;
-+ }
-+ }
-+ return false;
-+}
-+
- /*
- Parse a EntityDecl [70].
-
-@@ -6721,6 +6763,15 @@ bool QXmlSimpleReaderPrivate::parseEntityDecl()
- switch (state) {
- case EValue:
- if ( !entityExist(name())) {
-+ QString errorMessage;
-+ if (isPartiallyExpandedEntityValueTooLarge(&errorMessage)) {
-+ // The entity at entityName is entityValue.size() characters
-+ // long in its unexpanded form, and was mentioned timesReferenced times,
-+ // resulting in a string that would be greater than 1024 characters.
-+ reportParseError(errorMessage);
-+ return false;
-+ }
-+
- entities.insert(name(), string());
- if (declHnd) {
- if (!declHnd->internalEntityDecl(name(), string())) {
-diff --git a/src/xml/sax/qxml.cpp b/src/xml/sax/qxml.cpp
-index 3904632..befa801 100644
---- a/src/xml/sax/qxml.cpp
-+++ b/src/xml/sax/qxml.cpp
-@@ -426,7 +426,9 @@ private:
-
- // The limit to the amount of times the DTD parsing functions can be called
- // for the DTD currently being parsed.
-- int dtdRecursionLimit;
-+ static const int dtdRecursionLimit = 2;
-+ // The maximum amount of characters an entity value may contain, after expansion.
-+ static const int entityCharacterLimit = 1024;
-
- const QString &string();
- void stringClear();
-@@ -496,7 +498,7 @@ private:
- void unexpectedEof(ParseFunction where, int state);
- void parseFailed(ParseFunction where, int state);
- void pushParseState(ParseFunction function, int state);
-- bool isPartiallyExpandedEntityValueTooLarge(QString *errorMessage);
-+ bool isExpandedEntityValueTooLarge(QString *errorMessage);
-
- Q_DECLARE_PUBLIC(QXmlSimpleReader)
- QXmlSimpleReader *q_ptr;
-@@ -2764,7 +2766,6 @@ QXmlSimpleReaderPrivate::QXmlSimpleReaderPrivate(QXmlSimpleReader *reader)
- useNamespacePrefixes = false;
- reportWhitespaceCharData = true;
- reportEntities = false;
-- dtdRecursionLimit = 2;
- }
-
- QXmlSimpleReaderPrivate::~QXmlSimpleReaderPrivate()
-@@ -6638,30 +6639,43 @@ bool QXmlSimpleReaderPrivate::parseChoiceSeq()
- return false;
- }
-
--bool QXmlSimpleReaderPrivate::isPartiallyExpandedEntityValueTooLarge(QString *errorMessage)
-+bool QXmlSimpleReaderPrivate::isExpandedEntityValueTooLarge(QString *errorMessage)
- {
-- const QString value = string();
-- QMap<QString, int> referencedEntityCounts;
-- foreach (QString entityName, entities.keys()) {
-- for (int i = 0; i < value.size() && i != -1; ) {
-- i = value.indexOf(entityName, i);
-- if (i != -1) {
-- // The entityName we're currently trying to find
-- // was matched in this string; increase our count.
-- ++referencedEntityCounts[entityName];
-- i += entityName.size();
-+ QMap<QString, int> literalEntitySizes;
-+ // The entity at (QMap<QString,) referenced the entities at (QMap<QString,) (int>) times.
-+ QMap<QString, QMap<QString, int> > referencesToOtherEntities;
-+ QMap<QString, int> expandedSizes;
-+
-+ // For every entity, check how many times all entity names were referenced in its value.
-+ foreach (QString toSearch, entities.keys()) {
-+ // The amount of characters that weren't entity names, but literals, like 'X'.
-+ QString leftOvers = entities.value(toSearch);
-+ // How many times was entityName referenced by toSearch?
-+ foreach (QString entityName, entities.keys()) {
-+ for (int i = 0; i < leftOvers.size() && i != -1; ) {
-+ i = leftOvers.indexOf(QString::fromLatin1("&%1;").arg(entityName), i);
-+ if (i != -1) {
-+ leftOvers.remove(i, entityName.size() + 2);
-+ // The entityName we're currently trying to find was matched in this string; increase our count.
-+ ++referencesToOtherEntities[toSearch][entityName];
-+ }
- }
- }
-+ literalEntitySizes[toSearch] = leftOvers.size();
- }
-
-- foreach (QString entityName, referencedEntityCounts.keys()) {
-- const int timesReferenced = referencedEntityCounts[entityName];
-- const QString entityValue = entities[entityName];
-- if (entityValue.size() * timesReferenced > 1024) {
-+ foreach (QString entity, referencesToOtherEntities.keys()) {
-+ expandedSizes[entity] = literalEntitySizes[entity];
-+ foreach (QString referenceTo, referencesToOtherEntities.value(entity).keys()) {
-+ const int references = referencesToOtherEntities.value(entity).value(referenceTo);
-+ // The total size of an entity's value is the expanded size of all of its referenced entities, plus its literal size.
-+ expandedSizes[entity] += expandedSizes[referenceTo] * references + literalEntitySizes[referenceTo] * references;
-+ }
-+
-+ if (expandedSizes[entity] > entityCharacterLimit) {
- if (errorMessage) {
-- *errorMessage = QString::fromLatin1("The XML entity \"%1\""
-- "expands too a string that is too large to process when "
-- "referencing \"%2\" %3 times.").arg(entityName).arg(entityName).arg(timesReferenced);
-+ *errorMessage = QString::fromLatin1("The XML entity \"%1\" expands too a string that is too large to process (%2 characters > %3).");
-+ *errorMessage = (*errorMessage).arg(entity).arg(expandedSizes[entity]).arg(entityCharacterLimit);
- }
- return true;
- }
-@@ -6764,10 +6778,7 @@ bool QXmlSimpleReaderPrivate::parseEntityDecl()
- case EValue:
- if ( !entityExist(name())) {
- QString errorMessage;
-- if (isPartiallyExpandedEntityValueTooLarge(&errorMessage)) {
-- // The entity at entityName is entityValue.size() characters
-- // long in its unexpanded form, and was mentioned timesReferenced times,
-- // resulting in a string that would be greater than 1024 characters.
-+ if (isExpandedEntityValueTooLarge(&errorMessage)) {
- reportParseError(errorMessage);
- return false;
- }
---
-1.7.1
Added: CVE-2014-0190.patch
===================================================================
--- CVE-2014-0190.patch (rev 0)
+++ CVE-2014-0190.patch 2014-04-25 11:10:40 UTC (rev 211741)
@@ -0,0 +1,32 @@
+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
+
+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;
+
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2014-04-25 07:55:53 UTC (rev 211740)
+++ PKGBUILD 2014-04-25 11:10:40 UTC (rev 211741)
@@ -3,8 +3,8 @@
# Contributor: Pierre Schmitz <pierre at archlinux.de>
pkgname=qt4
-pkgver=4.8.5
-pkgrel=9
+pkgver=4.8.6
+pkgrel=1
arch=('i686' 'x86_64')
url='http://qt-project.org/'
license=('GPL3' 'LGPL' 'FDL' 'custom')
@@ -32,9 +32,8 @@
'qtconfig-qt4.desktop' 'assistant-qt4.desktop' 'designer-qt4.desktop'
'linguist-qt4.desktop' 'qdbusviewer-qt4.desktop'
'improve-cups-support.patch'
- 'qtbug-31579.patch' 'qtbug-32534.patch' 'qtbug-32908.patch'
- 'libmng2.patch' 'CVE-2013-4549.patch')
-md5sums=('1864987bdbb2f58f8ae8b350dfdbe133'
+ 'CVE-2014-0190.patch')
+md5sums=('2edbe4d6c2eff33ef91732602f3518eb'
'a16638f4781e56e7887ff8212a322ecc'
'8a28b3f52dbeb685d4b69440b520a3e1'
'9727c406c240990870c905696a8c5bd1'
@@ -41,11 +40,7 @@
'0e384663d3dd32abe35f5331c4147569'
'b859c5673e5098c39f72b2252947049e'
'c439c7731c25387352d8453ca7574971'
- '6ed8d26a8e4a9bba1f6c08fb99cc8357'
- 'bb0e0fa6ba953fa590d81ac612374e11'
- 'db343dcae522bc90d802ad1e83b7f5dd'
- '0ba4ffc9ff1acb9bf8a5f592ba956d48'
- '8701bd7445426c1ad5da3ddbd72df6b4')
+ '34ed257109afb83342cfe514c8abe027')
prepare() {
cd ${_pkgfqn}
@@ -53,18 +48,9 @@
# (FS#28381) (KDEBUG#180051)
patch -p1 -i "${srcdir}"/improve-cups-support.patch
- # (FS#36028) (QTBUG#31579)
- patch -p1 -i "${srcdir}"/qtbug-31579.patch
- # (FS#36394) (QTBUG#32534)
- patch -p1 -i "${srcdir}"/qtbug-32534.patch
- # (FS#36947) (QTBUG#32908)
- patch -p1 -i "${srcdir}"/qtbug-32908.patch
+ # QTBUG#38367
+ patch -p1 -i "${srcdir}"/CVE-2014-0190.patch
- # (FS#38081)
- patch -p1 -i "${srcdir}"/CVE-2013-4549.patch
- # (QTBUG#34894)
- patch -p1 -i "${srcdir}"/libmng2.patch
-
sed -i "s|-O2|${CXXFLAGS}|" mkspecs/common/{g++,gcc}-base.conf
sed -i "/^QMAKE_LFLAGS_RPATH/s| -Wl,-rpath,||g" mkspecs/common/gcc-base-unix.conf
sed -i "/^QMAKE_LFLAGS\s/s|+=|+= ${LDFLAGS}|g" mkspecs/common/gcc-base.conf
Deleted: libmng2.patch
===================================================================
--- libmng2.patch 2014-04-25 07:55:53 UTC (rev 211740)
+++ libmng2.patch 2014-04-25 11:10:40 UTC (rev 211741)
@@ -1,35 +0,0 @@
-From 515617e55be9a7bfa738a9c32ef8b19065de37d4 Mon Sep 17 00:00:00 2001
-From: aavit <eirik.aavitsland at digia.com>
-Date: Fri, 22 Nov 2013 15:49:44 +0100
-Subject: [PATCH] Recognize newer libmng versions in config test
-
-libmng 2.0.x has been released and is compatible and usable, but since
-it no longer provides a VERSION_MAJOR macro, the config test would fail.
-
-Task-number: QTBUG-34894
-Change-Id: I36f6ed9d69dbae88feb1b88ce099bf36c9283133
-Reviewed-by: Liang Qi <liang.qi at digia.com>
-(cherry picked from qtimageformats/9ae386653c321c8ddc10fad5ea88f32ebb3d3ffe)
----
- config.tests/unix/libmng/libmng.cpp | 2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
-
-diff --git a/config.tests/unix/libmng/libmng.cpp b/config.tests/unix/libmng/libmng.cpp
-index 0fbe554..9db10ff 100644
---- a/config.tests/unix/libmng/libmng.cpp
-+++ b/config.tests/unix/libmng/libmng.cpp
-@@ -46,9 +46,11 @@ int main(int, char **)
- mng_handle hMNG;
- mng_cleanup(&hMNG);
-
-+#if defined(MNG_VERSION_MAJOR)
- #if MNG_VERSION_MAJOR < 1 || (MNG_VERSION_MAJOR == 1 && MNG_VERSION_MINOR == 0 && MNG_VERSION_RELEASE < 9)
- #error System libmng version is less than 1.0.9; using built-in version instead.
- #endif
-+#endif
-
- return 0;
- }
---
-1.7.1
-
Deleted: qtbug-31579.patch
===================================================================
--- qtbug-31579.patch 2014-04-25 07:55:53 UTC (rev 211740)
+++ qtbug-31579.patch 2014-04-25 11:10:40 UTC (rev 211741)
@@ -1,146 +0,0 @@
-From 2a6537f0629aaff53a42d993ad94ad4de3cd3030 Mon Sep 17 00:00:00 2001
-From: Gunnar Sletta <gunnar.sletta at digia.com>
-Date: Thu, 4 Jul 2013 16:20:40 +1000
-Subject: [PATCH] Fix drawing of 0-width polylines from outside the devicerect.
-
-This was broken by a previous fix which aimed to fix gaps in
-polylines with tiny line segments. The result was that we
-skipped updating the origin point when stroke() didn't produce
-pixels which accidentally included the case of the line
-being completely outside the deviceRect. I fixed this
-by returning the value of clipLine in drawLine to the caller
-so we could still update the origin for this case.
-
-Task-number: QTBUG-31579
-Change-Id: Iac29436f042da7658bbeaf9370351dc6f2c95065
-(cherry picked from qtbase/900cccfd459fcbdbc4aa3d313afe12cfbf68fd87)
-Reviewed-by: Gunnar Sletta <gunnar.sletta at digia.com>
----
- src/gui/painting/qcosmeticstroker.cpp | 42 ++++++++++++++++++++------------
- src/gui/painting/qcosmeticstroker_p.h | 2 +-
- 2 files changed, 27 insertions(+), 17 deletions(-)
-
-diff --git a/src/gui/painting/qcosmeticstroker.cpp b/src/gui/painting/qcosmeticstroker.cpp
-index 0061ecb..4413170 100644
---- a/src/gui/painting/qcosmeticstroker.cpp
-+++ b/src/gui/painting/qcosmeticstroker.cpp
-@@ -133,10 +133,15 @@ struct NoDasher {
-
- };
-
-+/*
-+ * The return value is the result of the clipLine() call performed at the start
-+ * of each of the two functions, aka "false" means completely outside the devices
-+ * rect.
-+ */
- template<DrawPixel drawPixel, class Dasher>
--static void drawLine(QCosmeticStroker *stroker, qreal x1, qreal y1, qreal x2, qreal y2, int caps);
-+static bool drawLine(QCosmeticStroker *stroker, qreal x1, qreal y1, qreal x2, qreal y2, int caps);
- template<DrawPixel drawPixel, class Dasher>
--static void drawLineAA(QCosmeticStroker *stroker, qreal x1, qreal y1, qreal x2, qreal y2, int caps);
-+static bool drawLineAA(QCosmeticStroker *stroker, qreal x1, qreal y1, qreal x2, qreal y2, int caps);
-
- inline void drawPixel(QCosmeticStroker *stroker, int x, int y, int coverage)
- {
-@@ -602,17 +607,20 @@ void QCosmeticStroker::drawPath(const QVectorPath &path)
- caps |= CapEnd;
-
- QCosmeticStroker::Point last = this->lastPixel;
-- stroke(this, p.x(), p.y(), p2.x(), p2.y(), caps);
-+ bool unclipped = stroke(this, p.x(), p.y(), p2.x(), p2.y(), caps);
-
- /* fix for gaps in polylines with fastpen and aliased in a sequence
- of points with small distances: if current point p2 has been dropped
-- out, keep last non dropped point p. */
-- if (fastPenAliased) {
-- if (last.x != lastPixel.x || last.y != lastPixel.y ||
-- points == begin + 2 || points == end - 2 ) {
-- {
-- p = p2;
-- }
-+ out, keep last non dropped point p.
-+
-+ However, if the line was completely outside the devicerect, we
-+ still need to update p to avoid drawing the line after this one from
-+ a bad starting position.
-+ */
-+ if (fastPenAliased && unclipped) {
-+ if (last.x != lastPixel.x || last.y != lastPixel.y
-+ || points == begin + 2 || points == end - 2) {
-+ p = p2;
- }
- } else {
- p = p2;
-@@ -720,10 +728,10 @@ static inline void capAdjust(int caps, int &x1, int &x2, int &y, int yinc)
- the drawing shifts from horizontal to vertical or back.
- */
- template<DrawPixel drawPixel, class Dasher>
--static void drawLine(QCosmeticStroker *stroker, qreal rx1, qreal ry1, qreal rx2, qreal ry2, int caps)
-+static bool drawLine(QCosmeticStroker *stroker, qreal rx1, qreal ry1, qreal rx2, qreal ry2, int caps)
- {
- if (stroker->clipLine(rx1, ry1, rx2, ry2))
-- return;
-+ return false;
-
- static const int half = 31;
- int x1 = toF26Dot6(rx1) + half;
-@@ -813,7 +821,7 @@ static void drawLine(QCosmeticStroker *stroker, qreal rx1, qreal ry1, qreal rx2,
- } else {
- // horizontal
- if (!dx)
-- return;
-+ return true;
-
- QCosmeticStroker::Direction dir = QCosmeticStroker::LeftToRight;
-
-@@ -886,14 +894,15 @@ static void drawLine(QCosmeticStroker *stroker, qreal rx1, qreal ry1, qreal rx2,
- }
- }
- stroker->lastPixel = last;
-+ return true;
- }
-
-
- template<DrawPixel drawPixel, class Dasher>
--static void drawLineAA(QCosmeticStroker *stroker, qreal rx1, qreal ry1, qreal rx2, qreal ry2, int caps)
-+static bool drawLineAA(QCosmeticStroker *stroker, qreal rx1, qreal ry1, qreal rx2, qreal ry2, int caps)
- {
- if (stroker->clipLine(rx1, ry1, rx2, ry2))
-- return;
-+ return false;
-
- int x1 = toF26Dot6(rx1);
- int y1 = toF26Dot6(ry1);
-@@ -967,7 +976,7 @@ static void drawLineAA(QCosmeticStroker *stroker, qreal rx1, qreal ry1, qreal rx
- } else {
- // horizontal
- if (!dx)
-- return;
-+ return true;
-
- int yinc = F16Dot16FixedDiv(dy, dx);
-
-@@ -1029,6 +1038,7 @@ static void drawLineAA(QCosmeticStroker *stroker, qreal rx1, qreal ry1, qreal rx
- drawPixel(stroker, x, (y>>16) + 1, alpha * alphaEnd >> 6);
- }
- }
-+ return true;
- }
-
- QT_END_NAMESPACE
-diff --git a/src/gui/painting/qcosmeticstroker_p.h b/src/gui/painting/qcosmeticstroker_p.h
-index 870738b..3216856 100644
---- a/src/gui/painting/qcosmeticstroker_p.h
-+++ b/src/gui/painting/qcosmeticstroker_p.h
-@@ -56,7 +56,7 @@ QT_MODULE(Gui)
- class QCosmeticStroker;
-
-
--typedef void (*StrokeLine)(QCosmeticStroker *stroker, qreal x1, qreal y1, qreal x2, qreal y2, int caps);
-+typedef bool (*StrokeLine)(QCosmeticStroker *stroker, qreal x1, qreal y1, qreal x2, qreal y2, int caps);
-
- class QCosmeticStroker
- {
---
-1.7.1
-
Deleted: qtbug-32534.patch
===================================================================
--- qtbug-32534.patch 2014-04-25 07:55:53 UTC (rev 211740)
+++ qtbug-32534.patch 2014-04-25 11:10:40 UTC (rev 211741)
@@ -1,40 +0,0 @@
-From 1f40ed553e618c3b0511c7db4b4fd26c2d2b65bf Mon Sep 17 00:00:00 2001
-From: Peter Hartmann <phartmann at blackberry.com>
-Date: Thu, 25 Jul 2013 12:05:29 -0400
-Subject: [PATCH] QHttpMultiPart: fix data corruption in readData method
-
-When readData() is called repeatedly, we need to keep track which
-part of the multipart message we are currently reading from.
-Hereby we also need to take the boundary size into account, and not
-only the size of the multipart; otherwise we would skip a not
-completely read part. This would then later lead to advancing the
-read pointer by negative indexes and data loss.
-
-Task-number: QTBUG-32534
-Change-Id: Ibb6dff16adaf4ea67181d23d1d0c8459e33a0ed0
-Reviewed-by: Jonathan Liu <net147 at gmail.com>
-Reviewed-by: Shane Kearns <shane.kearns at accenture.com>
-(cherry picked from qtbase/af96c6fed931564c95037539f07e9c8e33c69529)
-Reviewed-by: Thiago Macieira <thiago.macieira at intel.com>
----
- src/network/access/qhttpmultipart.cpp | 3 +-
- tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 44 ++++++++++++++++++++++++
- 2 files changed, 46 insertions(+), 1 deletions(-)
-
-diff --git a/src/network/access/qhttpmultipart.cpp b/src/network/access/qhttpmultipart.cpp
-index 635129a..b25e917 100644
---- a/src/network/access/qhttpmultipart.cpp
-+++ b/src/network/access/qhttpmultipart.cpp
-@@ -488,7 +488,8 @@ qint64 QHttpMultiPartIODevice::readData(char *data, qint64 maxSize)
-
- // skip the parts we have already read
- while (index < multiPart->parts.count() &&
-- readPointer >= partOffsets.at(index) + multiPart->parts.at(index).d->size())
-+ readPointer >= partOffsets.at(index) + multiPart->parts.at(index).d->size()
-+ + multiPart->boundary.count() + 6) // 6 == 2 boundary dashes, \r\n after boundary, \r\n after multipart
- index++;
-
- // read the data
---
-1.7.1
-
Deleted: qtbug-32908.patch
===================================================================
--- qtbug-32908.patch 2014-04-25 07:55:53 UTC (rev 211740)
+++ qtbug-32908.patch 2014-04-25 11:10:40 UTC (rev 211741)
@@ -1,40 +0,0 @@
-From 0c03af0d4d928bdbb32b09eedb1dba3ce59e5278 Mon Sep 17 00:00:00 2001
-From: Gatis Paeglis <gatis.paeglis at digia.com>
-Date: Sat, 31 Aug 2013 21:22:47 +0200
-Subject: [PATCH] Revert "QTBUG-15319: fix shortcuts with secondary Xkb layout."
-
-The change which attempted to fix QTBUG-15319 broke keyboard
-shortcuts for non latin keyboard layouts.
-
-This patch reverts QTBUG-15319 (f45cdeda8) since it caused a
-regression.
-
-Task-number: QTBUG-32908
-
-Change-Id: I47d7984fa7986d5218d1f3ff1fc36d2ec67c9ba7
-Reviewed-by: David Faure <david.faure at kdab.com>
----
- src/gui/kernel/qkeymapper_x11.cpp | 5 +----
- 1 files changed, 1 insertions(+), 4 deletions(-)
-
-diff --git a/src/gui/kernel/qkeymapper_x11.cpp b/src/gui/kernel/qkeymapper_x11.cpp
-index 005ff3f..7daa41d 100644
---- a/src/gui/kernel/qkeymapper_x11.cpp
-+++ b/src/gui/kernel/qkeymapper_x11.cpp
-@@ -282,12 +282,9 @@ QList<int> QKeyMapperPrivate::possibleKeysXKB(QKeyEvent *event)
-
- // first, translate key only using lock modifiers (there are no Qt equivalents for these, so we must
- // always use them when determining the baseKeySym)
-- // Note: the Xkb group to be used for the conversion keycode->keysym has to be given to
-- // XkbLookupKeySym(). This information is contained in the bits 8 to 15 of xmodifiers.
-- // See https://bugreports.qt-project.org/browse/QTBUG-15319 .
- KeySym baseKeySym;
- uint consumedModifiers;
-- if (!XkbLookupKeySym(X11->display, xkeycode, (xmodifiers & (0xff00 | LockMask | qt_num_lock_mask)),
-+ if (!XkbLookupKeySym(X11->display, xkeycode, (xmodifiers & (LockMask | qt_num_lock_mask)),
- &consumedModifiers, &baseKeySym))
- return QList<int>();
-
---
-1.7.1
-
More information about the arch-commits
mailing list