net-libs/libquotient: readded, revamped

This commit is contained in:
Alfred Wingate 2021-01-18 00:21:28 +02:00
parent c43761c9e8
commit 7906145250
No known key found for this signature in database
GPG Key ID: A12750536B5E7010
10 changed files with 344 additions and 0 deletions

View File

@ -0,0 +1,2 @@
DIST libquotient-0.6.3.tar.gz 559142 BLAKE2B 77ba0583a90e9d29d44ce9a70909d6b51462a1f16dbc2e9d321eb9d638329af41fe7b0c4f7569e5d46f3a9c12d32b1ef0b926c5e285bc3ed9b70ba6d4dbe8024 SHA512 a81d88b00edc2af8ad9a6a297f1d65ef5d96fb305f503b46f29381df1bb007b42e44b207fb649316c38c977a5b03c93f884407dccdc48ab066af6b004dd9a9d6
DIST libquotient-0.6.4.tar.gz 559830 BLAKE2B 23a2d5bed5a5bcd30ffa00465291f5670d187d44991fe424bce5a2ce1ffc9d4fc09b0cc1e44e7b2b2470f82f6a3bcf4be2d6d9185d2952761a9a94d6f4fae2ce SHA512 6f505a697b6bd123004faaaae4ea6788ed985dafd965c5768cc838be98d6b27f65d5fb04c02d41c6a9ca2ce622acbd49264a9a14a99a087126d2852a926184ce

View File

@ -0,0 +1,29 @@
From d82cb1f43cab7976e25c6e9ff3e4ae17789ee11c Mon Sep 17 00:00:00 2001
From: Andreas Sturmlechner <asturm@gentoo.org>
Date: Sun, 3 Jan 2021 15:18:01 +0100
Subject: [PATCH] Install EXPORT_ANDROID_MK only if(ANDROID)
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
---
CMakeLists.txt | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2ee1cb4..eec27c8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -321,7 +321,10 @@ install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}ConfigVersion.cmake"
DESTINATION ${ConfigFilesLocation}
)
-install(EXPORT_ANDROID_MK ${PROJECT_NAME}Targets DESTINATION share/ndk-modules)
+
+if (ANDROID)
+ install(EXPORT_ANDROID_MK ${PROJECT_NAME}Targets DESTINATION share/ndk-modules)
+endif ()
if (WIN32)
install(FILES mime/packages/freedesktop.org.xml DESTINATION mime/packages)
--
2.30.0

View File

@ -0,0 +1,42 @@
From ff972d181f0f9e7bfa327c71450d55f951de27c1 Mon Sep 17 00:00:00 2001
From: Andreas Sturmlechner <asturm@gentoo.org>
Date: Sun, 3 Jan 2021 15:05:59 +0100
Subject: [PATCH] Put Qt5Test dependency behind -DQuotient_INSTALL_TESTS
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
---
CMakeLists.txt | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2ee1cb4..2a0908d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -58,7 +58,7 @@ else()
endforeach ()
endif()
-find_package(Qt5 5.9 REQUIRED Network Gui Multimedia Test)
+find_package(Qt5 5.9 REQUIRED Network Gui Multimedia)
get_filename_component(Qt5_Prefix "${Qt5_DIR}/../../../.." ABSOLUTE)
if (${PROJECT_NAME}_ENABLE_E2EE)
@@ -280,9 +280,12 @@ if (${PROJECT_NAME}_ENABLE_E2EE)
endif()
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Network Qt5::Gui Qt5::Multimedia)
-set(TEST_BINARY quotest)
-add_executable(${TEST_BINARY} ${tests_SRCS})
-target_link_libraries(${TEST_BINARY} Qt5::Core Qt5::Test ${PROJECT_NAME})
+if(${PROJECT_NAME}_INSTALL_TESTS)
+ find_package(Qt5Test)
+ set(TEST_BINARY quotest)
+ add_executable(${TEST_BINARY} ${tests_SRCS})
+ target_link_libraries(${TEST_BINARY} Qt5::Core Qt5::Test ${PROJECT_NAME})
+endif()
configure_file(${PROJECT_NAME}.pc.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc @ONLY NEWLINE_STYLE UNIX)
--
2.30.0

View File

@ -0,0 +1,92 @@
From f286ef4c5b3c71510d6ef15e8cc12cada84f3682 Mon Sep 17 00:00:00 2001
From: Nicolas Fella <nicolas.fella@gmx.de>
Date: Sun, 27 Dec 2020 21:24:06 +0100
Subject: [PATCH] Fix use-after-free of QNetworkReply in BaseJob
Usually QNetworkAccessManager expects the user to delete the replies, but when the QNetworkAccessManager itself is deleted it deletes all pending replies (https://code.woboq.org/qt5/qtbase/src/network/access/qnetworkaccessmanager.cpp.html#529).
This can lead to use-after-free crashes when d->reply is accessed. By putting the reply into a QPointer the exiting if(d->reply) checks can work properly.
(cherry picked from commit 9d854e778d8d6ef8e03e1ea74fe958675b24fd45)
---
lib/jobs/basejob.cpp | 33 +++++++++++++++++++--------------
1 file changed, 19 insertions(+), 14 deletions(-)
diff --git a/lib/jobs/basejob.cpp b/lib/jobs/basejob.cpp
index 3fa1cd94..2ac942f5 100644
--- a/lib/jobs/basejob.cpp
+++ b/lib/jobs/basejob.cpp
@@ -24,6 +24,7 @@
#include <QtCore/QTimer>
#include <QtCore/QStringBuilder>
#include <QtCore/QMetaEnum>
+#include <QtCore/QPointer>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkRequest>
@@ -76,15 +77,6 @@ QDebug BaseJob::Status::dumpToLog(QDebug dbg) const
return dbg << ": " << message;
}
-struct NetworkReplyDeleter : public QScopedPointerDeleteLater {
- static inline void cleanup(QNetworkReply* reply)
- {
- if (reply && reply->isRunning())
- reply->abort();
- QScopedPointerDeleteLater::cleanup(reply);
- }
-};
-
template <typename... Ts>
constexpr auto make_array(Ts&&... items)
{
@@ -112,6 +104,16 @@ class BaseJob::Private {
retryTimer.setSingleShot(true);
}
+ ~Private()
+ {
+ if (reply) {
+ if (reply->isRunning()) {
+ reply->abort();
+ }
+ delete reply;
+ }
+ }
+
void sendRequest();
/*! \brief Parse the response byte array into JSON
*
@@ -140,7 +142,10 @@ class BaseJob::Private {
QByteArrayList expectedKeys;
- QScopedPointer<QNetworkReply, NetworkReplyDeleter> reply;
+ // When the QNetworkAccessManager is destroyed it destroys all pending replies.
+ // Using QPointer allows us to know when that happend.
+ QPointer<QNetworkReply> reply;
+
Status status = Unprepared;
QByteArray rawResponse;
/// Contains a null document in case of non-JSON body (for a successful
@@ -315,16 +320,16 @@ void BaseJob::Private::sendRequest()
switch (verb) {
case HttpVerb::Get:
- reply.reset(connection->nam()->get(req));
+ reply = connection->nam()->get(req);
break;
case HttpVerb::Post:
- reply.reset(connection->nam()->post(req, requestData.source()));
+ reply = connection->nam()->post(req, requestData.source());
break;
case HttpVerb::Put:
- reply.reset(connection->nam()->put(req, requestData.source()));
+ reply = connection->nam()->put(req, requestData.source());
break;
case HttpVerb::Delete:
- reply.reset(connection->nam()->sendCustomRequest(req, "DELETE", requestData.source()));
+ reply = connection->nam()->sendCustomRequest(req, "DELETE", requestData.source());
break;
}
}

View File

@ -0,0 +1,29 @@
From d82cb1f43cab7976e25c6e9ff3e4ae17789ee11c Mon Sep 17 00:00:00 2001
From: Andreas Sturmlechner <asturm@gentoo.org>
Date: Sun, 3 Jan 2021 15:18:01 +0100
Subject: [PATCH] Install EXPORT_ANDROID_MK only if(ANDROID)
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
---
CMakeLists.txt | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2ee1cb4..eec27c8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -321,7 +321,10 @@ install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}ConfigVersion.cmake"
DESTINATION ${ConfigFilesLocation}
)
-install(EXPORT_ANDROID_MK ${PROJECT_NAME}Targets DESTINATION share/ndk-modules)
+
+if (ANDROID)
+ install(EXPORT_ANDROID_MK ${PROJECT_NAME}Targets DESTINATION share/ndk-modules)
+endif ()
if (WIN32)
install(FILES mime/packages/freedesktop.org.xml DESTINATION mime/packages)
--
2.30.0

View File

@ -0,0 +1,42 @@
From ff972d181f0f9e7bfa327c71450d55f951de27c1 Mon Sep 17 00:00:00 2001
From: Andreas Sturmlechner <asturm@gentoo.org>
Date: Sun, 3 Jan 2021 15:05:59 +0100
Subject: [PATCH] Put Qt5Test dependency behind -DQuotient_INSTALL_TESTS
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
---
CMakeLists.txt | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2ee1cb4..2a0908d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -58,7 +58,7 @@ else()
endforeach ()
endif()
-find_package(Qt5 5.9 REQUIRED Network Gui Multimedia Test)
+find_package(Qt5 5.9 REQUIRED Network Gui Multimedia)
get_filename_component(Qt5_Prefix "${Qt5_DIR}/../../../.." ABSOLUTE)
if (${PROJECT_NAME}_ENABLE_E2EE)
@@ -280,9 +280,12 @@ if (${PROJECT_NAME}_ENABLE_E2EE)
endif()
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Network Qt5::Gui Qt5::Multimedia)
-set(TEST_BINARY quotest)
-add_executable(${TEST_BINARY} ${tests_SRCS})
-target_link_libraries(${TEST_BINARY} Qt5::Core Qt5::Test ${PROJECT_NAME})
+if(${PROJECT_NAME}_INSTALL_TESTS)
+ find_package(Qt5Test)
+ set(TEST_BINARY quotest)
+ add_executable(${TEST_BINARY} ${tests_SRCS})
+ target_link_libraries(${TEST_BINARY} Qt5::Core Qt5::Test ${PROJECT_NAME})
+endif()
configure_file(${PROJECT_NAME}.pc.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc @ONLY NEWLINE_STYLE UNIX)
--
2.30.0

View File

@ -0,0 +1,50 @@
# Copyright 2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
inherit cmake
DESCRIPTION="A Qt5 library to write cross-platform clients for Matrix"
HOMEPAGE="https://matrix.org/docs/projects/sdk/quotient"
if [[ ${PV} == "9999" ]]; then
inherit git-r3
EGIT_REPO_URI="https://github.com/quotient-im/"${PN}".git"
else
SRC_URI="https://github.com/quotient-im/libQuotient/archive/"${PV}".tar.gz -> "${P}".tar.gz"
KEYWORDS="~amd64"
S="${WORKDIR}/libQuotient-${PV}"
fi
LICENSE="LGPL-2.1"
SLOT="0"
IUSE="e2e"
DEPEND="
dev-qt/qtcore:5
dev-qt/qtgui:5
dev-qt/qtmultimedia:5
dev-qt/qtnetwork:5
dev-qt/qttest:5
e2e? ( dev-libs/libQtOlm )
"
RDEPEND="${DEPEND}"
PATCHES=(
"${FILESDIR}"/${P}-use-after-free.patch # 0.6.x branch
# downstream patches
"${FILESDIR}"/${P}-no-android.patch
"${FILESDIR}"/${P}-no-tests.patch
)
src_configure() {
local mycmakeargs=(
-DBUILD_SHARED_LIBS=ON
-DQuotient_ENABLE_E2EE=$(usex e2e)
-DUSE_INTREE_LIBQOLM=OFF
-DQuotient_INSTALL_TESTS=OFF
-DCMAKE_DISABLE_FIND_PACKAGE_Git=ON
)
cmake_src_configure
}

View File

@ -0,0 +1,47 @@
# Copyright 2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
inherit cmake
DESCRIPTION="A Qt5 library to write cross-platform clients for Matrix"
HOMEPAGE="https://matrix.org/docs/projects/sdk/quotient"
if [[ ${PV} == "9999" ]]; then
inherit git-r3
EGIT_REPO_URI="https://github.com/quotient-im/"${PN}".git"
else
SRC_URI="https://github.com/quotient-im/libQuotient/archive/"${PV}".tar.gz -> "${P}".tar.gz"
KEYWORDS="~amd64"
S="${WORKDIR}/libQuotient-${PV}"
fi
LICENSE="LGPL-2.1"
SLOT="0"
IUSE="e2e"
DEPEND="
dev-qt/qtcore:5
dev-qt/qtgui:5
dev-qt/qtmultimedia:5
dev-qt/qtnetwork:5
e2e? ( dev-libs/libQtOlm )
"
RDEPEND="${DEPEND}"
PATCHES=(
"${FILESDIR}"/${P}-no-android.patch
"${FILESDIR}"/${P}-no-tests.patch
)
src_configure() {
local mycmakeargs=(
-DBUILD_SHARED_LIBS=ON
-DQuotient_ENABLE_E2EE=$(usex e2e)
-DUSE_INTREE_LIBQOLM=OFF
-DQuotient_INSTALL_TESTS=OFF
-DCMAKE_DISABLE_FIND_PACKAGE_Git=ON
)
cmake_src_configure
}

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<upstream>
<remote-id type="github">quotient-im/libQuotient</remote-id>
</upstream>
<use>
<flag name="e2e">Build with e2e encryption support</flag>
</use>
</pkgmetadata>

1
profiles/updates/1Q-2021 Normal file
View File

@ -0,0 +1 @@
move dev-libs/libQuotient net-libs/libquotient