Date: Friday, March 6, 2020 @ 07:37:09 Author: arojas Revision: 376831
Fix binary incompatible change in QJsonObject and QJsonArray (FS#65673), sync qt5-base-cflags.patch changes from trunk Added: qt5-base/kde-unstable/qtbug-82700.patch Modified: qt5-base/kde-unstable/PKGBUILD qt5-base/kde-unstable/qt5-base-cflags.patch -----------------------+ PKGBUILD | 12 ++++---- qt5-base-cflags.patch | 12 ++++---- qtbug-82700.patch | 72 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 10 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2020-03-06 07:12:18 UTC (rev 376830) +++ PKGBUILD 2020-03-06 07:37:09 UTC (rev 376831) @@ -5,7 +5,7 @@ pkgname=(qt5-base qt5-xcb-private-headers) _qtver=5.15.0-beta1 pkgver=${_qtver/-/} -pkgrel=2 +pkgrel=3 arch=('x86_64') url='https://www.qt.io' license=('GPL3' 'LGPL3' 'FDL' 'custom') @@ -31,11 +31,13 @@ source=("https://download.qt.io/development_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz" qt5-base-cflags.patch qtbug-82547a.patch::"https://code.qt.io/cgit/qt/qtbase.git/patch/?id=ede85452" - qtbug-82547b.patch::"https://code.qt.io/cgit/qt/qtbase.git/patch/?id=1edf586e") + qtbug-82547b.patch::"https://code.qt.io/cgit/qt/qtbase.git/patch/?id=1edf586e" + qtbug-82700.patch) sha256sums=('d835c6ba15e1a443bb0114a5eeea4efd512bc74700bb1ae003514d1465cd7b94' - 'c3ccc95178203a4ce2c84862009309ab507dc84e846f30ddd8cea95564a46c01' + '7cbf56fd6076f0c193f06715d1dfdae61905504cb01bd907ac33cc487f48d8c6' 'd829a91b91f2f0c8c7e50b24ca98a3dca931f5e89f61e5dbd2cbe45ae8d47632' - '83ed9cf370078a87ae2dceabc602baccd9a23e6d1aec376344a29cf168ed72d7') + '83ed9cf370078a87ae2dceabc602baccd9a23e6d1aec376344a29cf168ed72d7' + '38c28c63e86dbae8d27db38d274bb9b5f4d2702feab9023f86d50555c84a96af') prepare() { cd ${_pkgfqn} @@ -43,6 +45,7 @@ patch -p1 -i ../qt5-base-cflags.patch # Use system CFLAGS patch -p1 -i ../qtbug-82547a.patch # fix build with system mimetype database patch -p1 -i ../qtbug-82547b.patch + patch -p1 -i ../qtbug-82700.patch # Fix binary incompatible change in QJsonObject and QJsonArray } build() { @@ -61,7 +64,6 @@ -openssl-linked \ -nomake examples \ -no-rpath \ - -optimized-qmake \ -dbus-linked \ -system-harfbuzz \ -journald \ Modified: qt5-base-cflags.patch =================================================================== --- qt5-base-cflags.patch 2020-03-06 07:12:18 UTC (rev 376830) +++ qt5-base-cflags.patch 2020-03-06 07:37:09 UTC (rev 376831) @@ -2,25 +2,27 @@ index a493cd5984..79f2d2fff9 100644 --- a/mkspecs/common/g++-unix.conf +++ b/mkspecs/common/g++-unix.conf -@@ -10,5 +10,5 @@ +@@ -10,5 +10,6 @@ include(g++-base.conf) -QMAKE_LFLAGS_RELEASE += -Wl,-O1 -+QMAKE_LFLAGS_RELEASE += $$(LDFLAGS) ++ENV_LDFLAGS = $$(LDFLAGS) ++QMAKE_LFLAGS_RELEASE += $$split(ENV_LDFLAGS, " ") QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined diff --git a/mkspecs/common/gcc-base.conf b/mkspecs/common/gcc-base.conf index 4d82321cba..4a61fc9d25 100644 --- a/mkspecs/common/gcc-base.conf +++ b/mkspecs/common/gcc-base.conf -@@ -40,8 +40,8 @@ QMAKE_CFLAGS_OPTIMIZE_SIZE = -Os +@@ -40,8 +40,9 @@ QMAKE_CFLAGS_OPTIMIZE_SIZE = -Os QMAKE_CFLAGS_DEPS += -M QMAKE_CFLAGS_WARN_ON += -Wall -Wextra QMAKE_CFLAGS_WARN_OFF += -w -QMAKE_CFLAGS_RELEASE += $$QMAKE_CFLAGS_OPTIMIZE -QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -g -+QMAKE_CFLAGS_RELEASE += $$(CFLAGS) -+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$(CFLAGS) $$(DEBUG_CFLAGS) ++ENV_CFLAGS = $$(CFLAGS) ++QMAKE_CFLAGS_RELEASE += $$split(ENV_CFLAGS, " ") ++QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -g $$split(ENV_CFLAGS, " ") QMAKE_CFLAGS_DEBUG += -g QMAKE_CFLAGS_SHLIB += $$QMAKE_CFLAGS_PIC QMAKE_CFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_PIC Added: qtbug-82700.patch =================================================================== --- qtbug-82700.patch (rev 0) +++ qtbug-82700.patch 2020-03-06 07:37:09 UTC (rev 376831) @@ -0,0 +1,72 @@ +From 8ac10bea1fac5dad30bf9ff8a1d43eddc271bfb5 Mon Sep 17 00:00:00 2001 +From: Thiago Macieira <thiago.macie...@intel.com> +Date: Thu, 05 Mar 2020 15:31:38 -0800 +Subject: [PATCH] Fix binary compatibility issue in QJson{Array,Object} initializer_list + +The rewrite using CBOR internals replaced one of the two naked pointers +that were members of QJsonArray and QJsonObject with a +QExplicitlySharedDataPointer. The problem is that its operator= will +read the current value to decrement the refcount and possibly delete the +pointed object. + +But QJson{Array,Object}::initialize() are called from inlined code, +without initialization. So we can't call operator=. We need to memcpy to +write a nullptr. + +This is not unit-testable because it requires compiling against 5.14 or +earlier, then running against 5.15. + +Fixes: QTBUG-82700 +Change-Id: Iaa63461109844e978376fffd15f98c62656d197c +--- + +diff --git a/src/corelib/serialization/qjsonarray.cpp b/src/corelib/serialization/qjsonarray.cpp +index 0870277..05138ad 100644 +--- a/src/corelib/serialization/qjsonarray.cpp ++++ b/src/corelib/serialization/qjsonarray.cpp +@@ -167,7 +167,11 @@ + */ + void QJsonArray::initialize() + { +- a = nullptr; ++ // Because we're being called with uninitialized state, we can't do: ++ // a = nullptr; ++ // QExplicitlyDataSharedPointer::operator= will read the current value ++ void *ptr = &a; ++ memset(ptr, 0, sizeof(a)); + } + + /*! +@@ -177,7 +181,6 @@ + + QJsonArray::QJsonArray(std::initializer_list<QJsonValue> args) + { +- initialize(); + for (const auto & arg : args) + append(arg); + } +diff --git a/src/corelib/serialization/qjsonobject.cpp b/src/corelib/serialization/qjsonobject.cpp +index a698727..4f0b5cd 100644 +--- a/src/corelib/serialization/qjsonobject.cpp ++++ b/src/corelib/serialization/qjsonobject.cpp +@@ -150,7 +150,11 @@ + + void QJsonObject::initialize() + { +- o = nullptr; ++ // Because we're being called with uninitialized state, we can't do: ++ // o = nullptr; ++ // QExplicitlyDataSharedPointer::operator= will read the current value ++ void *ptr = &o; ++ memset(ptr, 0, sizeof(o)); + } + + /*! +@@ -160,7 +164,6 @@ + + QJsonObject::QJsonObject(std::initializer_list<QPair<QString, QJsonValue> > args) + { +- initialize(); + for (const auto &arg : args) + insert(arg.first, arg.second); + }