Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libqxmpp for openSUSE:Factory 
checked in at 2024-07-11 20:30:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libqxmpp (Old)
 and      /work/SRC/openSUSE:Factory/.libqxmpp.new.17339 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libqxmpp"

Thu Jul 11 20:30:24 2024 rev:25 rq:1186567 version:1.7.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/libqxmpp/libqxmpp.changes        2024-05-22 
21:30:24.313435767 +0200
+++ /work/SRC/openSUSE:Factory/.libqxmpp.new.17339/libqxmpp.changes     
2024-07-11 20:30:44.391506280 +0200
@@ -1,0 +2,7 @@
+Wed Jul 10 06:58:56 UTC 2024 - Michael Vetter <mvet...@suse.com>
+
+- Update to 1.7.1:
+  * OMEMO: Fix messages are dropped if decryption fails (#634)
+  * Fix build issue with MSVC: missing export of utility functions
+
+-------------------------------------------------------------------

Old:
----
  libqxmpp-1.7.0.tar.gz

New:
----
  libqxmpp-1.7.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libqxmpp.spec ++++++
--- /var/tmp/diff_new_pack.Q7ttfd/_old  2024-07-11 20:30:45.007529045 +0200
+++ /var/tmp/diff_new_pack.Q7ttfd/_new  2024-07-11 20:30:45.007529045 +0200
@@ -32,7 +32,7 @@
 %endif
 %define sover 5
 Name:           libqxmpp%{?pkg_suffix}
-Version:        1.7.0
+Version:        1.7.1
 Release:        0
 Summary:        Qt XMPP Library
 License:        LGPL-2.1-or-later
@@ -46,8 +46,8 @@
 %endif
 # c++-17 is required
 %if 0%{?suse_version} < 1550
-BuildRequires:  gcc13-c++
 BuildRequires:  gcc13-PIE
+BuildRequires:  gcc13-c++
 %endif
 BuildRequires:  pkgconfig
 %if 0%{?qt5}

++++++ libqxmpp-1.7.0.tar.gz -> libqxmpp-1.7.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qxmpp-1.7.0/CHANGELOG.md new/qxmpp-1.7.1/CHANGELOG.md
--- old/qxmpp-1.7.0/CHANGELOG.md        2024-05-19 17:51:48.000000000 +0200
+++ new/qxmpp-1.7.1/CHANGELOG.md        2024-07-07 13:06:52.000000000 +0200
@@ -4,6 +4,12 @@
 SPDX-License-Identifier: CC0-1.0
 -->
 
+QXmpp 1.7.1 (July 07, 2024)
+---------------------------
+
+ - OMEMO: Fix messages are dropped if decryption fails (@melvo, #634)
+ - Fix build issue with MSVC: missing export of utility functions (@lnjX)
+
 QXmpp 1.7.0 (May 19, 2024)
 --------------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qxmpp-1.7.0/CMakeLists.txt 
new/qxmpp-1.7.1/CMakeLists.txt
--- old/qxmpp-1.7.0/CMakeLists.txt      2024-05-19 17:51:48.000000000 +0200
+++ new/qxmpp-1.7.1/CMakeLists.txt      2024-07-07 13:06:52.000000000 +0200
@@ -3,7 +3,7 @@
 # SPDX-License-Identifier: CC0-1.0
 
 cmake_minimum_required(VERSION 3.7)
-project(qxmpp VERSION 1.7.0)
+project(qxmpp VERSION 1.7.1)
 
 set(SO_VERSION 5)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qxmpp-1.7.0/src/base/QXmppUtils_p.h 
new/qxmpp-1.7.1/src/base/QXmppUtils_p.h
--- old/qxmpp-1.7.0/src/base/QXmppUtils_p.h     2024-05-19 17:51:48.000000000 
+0200
+++ new/qxmpp-1.7.1/src/base/QXmppUtils_p.h     2024-07-07 13:06:52.000000000 
+0200
@@ -95,9 +95,9 @@
 // DOM
 //
 
-bool isIqType(const QDomElement &, QStringView tagName, QStringView xmlns);
-QDomElement firstChildElement(const QDomElement &, QStringView tagName = {}, 
QStringView xmlNs = {});
-QDomElement nextSiblingElement(const QDomElement &, QStringView tagName = {}, 
QStringView xmlNs = {});
+QXMPP_EXPORT bool isIqType(const QDomElement &, QStringView tagName, 
QStringView xmlns);
+QXMPP_EXPORT QDomElement firstChildElement(const QDomElement &, QStringView 
tagName = {}, QStringView xmlNs = {});
+QXMPP_EXPORT QDomElement nextSiblingElement(const QDomElement &, QStringView 
tagName = {}, QStringView xmlNs = {});
 
 struct DomChildElements {
     QDomElement parent;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qxmpp-1.7.0/src/client/QXmppMixManager.cpp 
new/qxmpp-1.7.1/src/client/QXmppMixManager.cpp
--- old/qxmpp-1.7.0/src/client/QXmppMixManager.cpp      2024-05-19 
17:51:48.000000000 +0200
+++ new/qxmpp-1.7.1/src/client/QXmppMixManager.cpp      2024-07-07 
13:06:52.000000000 +0200
@@ -54,6 +54,23 @@
 /// auto *manager = client->addNewExtension<QXmppMixManager>();
 /// \endcode
 ///
+/// Before calling one of the following methods, you need to request the 
information once per
+/// connection:
+///     * participantSupport()
+///     * messageArchivingSupport()
+/// That is done via QXmppDiscoveryManager::requestInfo():
+/// \code
+/// 
client->findExtension<QXmppDiscoveryManager>()->requestInfo(client->configuration().domain());
+/// \endcode
+///
+/// Before calling one of the following methods, you need to request the 
information once per
+/// connection:
+///     * services()
+/// That is done via QXmppDiscoveryManager::requestItems():
+/// \code
+/// 
client->findExtension<QXmppDiscoveryManager>()->requestItems(client->configuration().domain());
+/// \endcode
+///
 /// If you want to be informed about updates of the channel (e.g., its 
configuration or allowed
 /// JIDs), make sure to subscribe to the corresponding nodes.
 ///
@@ -170,13 +187,14 @@
 ///
 /// Server support for a feature.
 ///
+/// The information is cached until a new connection is established.
+/// That makes it possible to retrieve the latest state even while the client 
is disconnected.
+///
 /// \var QXmppMixManager::Support::Unknown
 ///
 /// Whether the server supports the feature is not known.
 ///
 /// That means, there is no corresponding information from the server (yet).
-/// That is, for example, the case if the client is not connected or connected 
but has not received
-/// the information yet.
 ///
 /// \var QXmppMixManager::Unsupported
 ///
@@ -678,8 +696,7 @@
 /// Requests all JIDs which are allowed to participate in a MIX channel.
 ///
 /// The JIDs can specify users (e.g., "al...@example.org") or groups of users 
(e.g., "example.org")
-/// to let all users join which have a JID containing the specified domain.
-/// This is only relevant/used for private channels having a user-specified 
JID.
+/// for allowing all users to participate that have a JID containing the 
specified domain.
 ///
 /// \param channelJid JID of the channel
 ///
@@ -693,8 +710,8 @@
 ///
 /// Allows a JID to participate in a MIX channel.
 ///
-/// The JID can specify a user (e.g., "al...@example.org") or groups of users 
(e.g., "example.org")
-/// to let all users join which have a JID containing the specified domain.
+/// The JID can specify a user (e.g., "al...@example.org") or a group of users 
(e.g., "example.org")
+/// for allowing all users to participate that have a JID containing the 
specified domain.
 ///
 /// Allowing a JID is only needed if the channel does not allow anyone to 
participate.
 /// That is the case when QXmppMixConfigItem::Node::AllowedJids exists for the 
channel.
@@ -801,8 +818,8 @@
 ///
 /// Bans a JID from participating in a MIX channel.
 ///
-/// The JID can specify a user (e.g., "al...@example.org") or groups of users 
(e.g., "example.org")
-/// to ban all users which have a JID containing the specified domain.
+/// The JID can specify a user (e.g., "al...@example.org") or a group of users 
(e.g., "example.org")
+/// for banning all users that have a JID containing the specified domain.
 ///
 /// Before calling this, make sure that QXmppMixConfigItem::Node::BannedJids 
exists for the channel.
 /// Use requestChannelConfiguration() and QXmppMixConfigItem::nodes() to 
determine that.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qxmpp-1.7.0/src/omemo/QXmppOmemoManager.cpp 
new/qxmpp-1.7.1/src/omemo/QXmppOmemoManager.cpp
--- old/qxmpp-1.7.0/src/omemo/QXmppOmemoManager.cpp     2024-05-19 
17:51:48.000000000 +0200
+++ new/qxmpp-1.7.1/src/omemo/QXmppOmemoManager.cpp     2024-07-07 
13:06:52.000000000 +0200
@@ -1024,8 +1024,7 @@
             SendError::EncryptionError });
     }
 
-    auto omemoElement = message.omemoElement();
-    if (!omemoElement) {
+    if (!message.omemoElement()) {
         return makeReadyTask<MessageDecryptResult>(NotEncrypted());
     }
 
@@ -1157,9 +1156,11 @@
 {
     if (d->isStarted && message.omemoElement()) {
         auto future = d->decryptMessage(message);
-        future.then(this, [=](std::optional<QXmppMessage> 
optionalDecryptedMessage) mutable {
+        future.then(this, [this, message](std::optional<QXmppMessage> 
optionalDecryptedMessage) {
             if (optionalDecryptedMessage) {
                 injectMessage(std::move(*optionalDecryptedMessage));
+            } else {
+                Q_EMIT client() -> messageReceived(message);
             }
         });
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qxmpp-1.7.0/src/omemo/QXmppOmemoManager_p.cpp 
new/qxmpp-1.7.1/src/omemo/QXmppOmemoManager_p.cpp
--- old/qxmpp-1.7.0/src/omemo/QXmppOmemoManager_p.cpp   2024-05-19 
17:51:48.000000000 +0200
+++ new/qxmpp-1.7.1/src/omemo/QXmppOmemoManager_p.cpp   2024-07-07 
13:06:52.000000000 +0200
@@ -1057,18 +1057,6 @@
                     const auto &deviceId = itr.key();
                     const auto &device = itr.value();
 
-                    // Skip encrypting for a device if it does not respond for 
a while.
-                    if (const auto unrespondedSentStanzasCount = 
device.unrespondedSentStanzasCount; unrespondedSentStanzasCount == 
UNRESPONDED_STANZAS_UNTIL_ENCRYPTION_IS_STOPPED) {
-                        if (++(*skippedDevicesCount) == devicesCount) {
-                            warning(u"OMEMO element could not be created 
because no recipient device responded to " +
-                                    
QString::number(unrespondedSentStanzasCount) +
-                                    u" sent stanzas");
-                            interface.finish(std::nullopt);
-                        }
-
-                        continue;
-                    }
-
                     auto controlDeviceProcessing = [=](bool isSuccessful = 
true) mutable {
                         if (isSuccessful) {
                             ++(*successfullyProcessedDevicesCount);
@@ -1087,6 +1075,19 @@
                         }
                     };
 
+                    // Skip encrypting for a device if it does not respond for 
a while.
+                    if (const auto unrespondedSentStanzasCount = 
device.unrespondedSentStanzasCount; unrespondedSentStanzasCount == 
UNRESPONDED_STANZAS_UNTIL_ENCRYPTION_IS_STOPPED) {
+                        if (++(*skippedDevicesCount) == devicesCount) {
+                            warning(u"OMEMO element could not be created 
because no recipient device responded to " +
+                                    
QString::number(unrespondedSentStanzasCount) + u" sent stanzas");
+                            interface.finish(std::nullopt);
+                        } else {
+                            controlDeviceProcessing(false);
+                        }
+
+                        continue;
+                    }
+
                     const auto address = Address(jid, deviceId);
 
                     auto addOmemoEnvelope = [=](bool isKeyExchange = false) 
mutable {
@@ -1099,7 +1100,11 @@
                         } else if (devices.value(jid).contains(deviceId)) {
                             auto &deviceBeingModified = devices[jid][deviceId];
                             
deviceBeingModified.unrespondedReceivedStanzasCount = 0;
-                            ++deviceBeingModified.unrespondedSentStanzasCount;
+
+                            if (auto &unrespondedSentStanzasCount = 
deviceBeingModified.unrespondedSentStanzasCount; unrespondedSentStanzasCount + 
1 <= UNRESPONDED_STANZAS_UNTIL_ENCRYPTION_IS_STOPPED) {
+                                ++unrespondedSentStanzasCount;
+                            }
+
                             omemoStorage->addDevice(jid, deviceId, 
deviceBeingModified);
 
                             QXmppOmemoEnvelope omemoEnvelope;
@@ -1609,13 +1614,12 @@
             warning(QStringLiteral("OMEMO envelope data could not be 
deserialized"));
             interface.finish(std::nullopt);
         } else {
-            BufferPtr publicIdentityKeyBuffer;
+            BufferPtr 
publicIdentityKeyBuffer(ec_public_key_get_ed(pre_key_signal_message_get_identity_key(omemoEnvelopeData.get())));
 
-            if (ec_public_key_serialize(publicIdentityKeyBuffer.ptrRef(), 
pre_key_signal_message_get_identity_key(omemoEnvelopeData.get())) < 0) {
+            if (const auto key = publicIdentityKeyBuffer.toByteArray(); 
key.isEmpty()) {
                 warning(QStringLiteral("Public Identity key could not be 
retrieved"));
                 interface.finish(std::nullopt);
             } else {
-                const auto key = publicIdentityKeyBuffer.toByteArray();
                 auto &device = devices[senderJid][senderDeviceId];
                 auto &storedKeyId = device.keyId;
 

Reply via email to