From 8b9a9e0f3e11d8a251c01fe68678dfea6c96e05d Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Wed, 10 Jan 2024 10:41:22 +0100 Subject: [PATCH 1/5] [xdata] Fix NPE in FillableForm Calling write() in FillableForm's constructor causes a NPE because write() makes use of requiredFields which has not been set at this time. Furthermore, write() makes use of missingRequiredFields, which is also populated in that loop. Therefore, we have to delay the invocation of write() until requiredFields got set. Thanks to Dan Caseley for reporting this. Reported-by: Dan Caseley --- .../org/jivesoftware/smackx/xdata/form/FillableForm.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/form/FillableForm.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/form/FillableForm.java index b40cb92a8..d0657ba08 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/form/FillableForm.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/form/FillableForm.java @@ -1,6 +1,6 @@ /** * - * Copyright 2020 Florian Schmaus + * Copyright 2020-2024 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -55,6 +55,7 @@ public class FillableForm extends FilledForm { } Set requiredFields = new HashSet<>(); + List requiredFieldsWithDefaultValue = new ArrayList<>(); for (FormField formField : dataForm.getFields()) { if (formField.isRequired()) { String fieldName = formField.getFieldName(); @@ -62,13 +63,17 @@ public class FillableForm extends FilledForm { if (formField.hasValueSet()) { // This is a form field with a default value. - write(formField); + requiredFieldsWithDefaultValue.add(formField); } else { missingRequiredFields.add(fieldName); } } } this.requiredFields = Collections.unmodifiableSet(requiredFields); + + for (FormField field : requiredFieldsWithDefaultValue) { + write(field); + } } protected void writeListMulti(String fieldName, List values) { From a39e5baa741d32af41ac559bbcc7b6233938b725 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Fri, 9 Feb 2024 13:17:36 +0100 Subject: [PATCH 2/5] [socks5] Ignore zone IDs of internet addresses Fixes SMACK-940. --- .../smackx/bytestreams/socks5/packet/Bytestream.java | 2 +- .../jingle_s5b/elements/JingleS5BTransportCandidate.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/socks5/packet/Bytestream.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/socks5/packet/Bytestream.java index 64b3ad7d9..a07dd549e 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/socks5/packet/Bytestream.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/socks5/packet/Bytestream.java @@ -295,7 +295,7 @@ public class Bytestream extends IQ { * @param port port of the stream host. */ public StreamHost(final Jid jid, final String address, int port) { - this(jid, InternetAddress.from(address), port); + this(jid, InternetAddress.fromIgnoringZoneId(address), port); } public StreamHost(Jid jid, InetAddress address, int port) { diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_s5b/elements/JingleS5BTransportCandidate.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_s5b/elements/JingleS5BTransportCandidate.java index 4ad96fcca..d3be5a4b3 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_s5b/elements/JingleS5BTransportCandidate.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_s5b/elements/JingleS5BTransportCandidate.java @@ -51,7 +51,7 @@ public final class JingleS5BTransportCandidate extends JingleContentTransportCan private final Type type; public JingleS5BTransportCandidate(String candidateId, String hostString, Jid jid, int port, int priority, Type type) { - this(candidateId, InternetAddress.from(hostString), jid, port, priority, type); + this(candidateId, InternetAddress.fromIgnoringZoneId(hostString), jid, port, priority, type); } public JingleS5BTransportCandidate(String candidateId, InternetAddress host, Jid jid, int port, int priority, Type type) { @@ -176,7 +176,7 @@ public final class JingleS5BTransportCandidate extends JingleContentTransportCan } public Builder setHost(String host) { - InternetAddress inetAddress = InternetAddress.from(host); + InternetAddress inetAddress = InternetAddress.fromIgnoringZoneId(host); return setHost(inetAddress); } From 6918663760f2a12134027a2b5e268fa18115436d Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Fri, 9 Feb 2024 14:13:36 +0100 Subject: [PATCH 3/5] [roster] suppress "roster not loaded while processing presence" if self-presence Fixes SMACK-941. --- .../java/org/jivesoftware/smack/roster/Roster.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/smack-im/src/main/java/org/jivesoftware/smack/roster/Roster.java b/smack-im/src/main/java/org/jivesoftware/smack/roster/Roster.java index 02ee0d7e1..6c59b1dc7 100644 --- a/smack-im/src/main/java/org/jivesoftware/smack/roster/Roster.java +++ b/smack-im/src/main/java/org/jivesoftware/smack/roster/Roster.java @@ -1534,11 +1534,20 @@ public final class Roster extends Manager { } } + + final Jid from = packet.getFrom(); + if (!isLoaded() && rosterLoadedAtLogin) { - LOGGER.warning("Roster not loaded while processing " + packet); + XMPPConnection connection = connection(); + + // Only log the warning, if this is not the reflected self-presence. Otherwise, + // the reflected self-presence may cause a spurious warning in case the + // connection got quickly shut down. See SMACK-941. + if (connection != null && from != null && !from.equals(connection.getUser())) { + LOGGER.warning("Roster not loaded while processing " + packet); + } } final Presence presence = (Presence) packet; - final Jid from = presence.getFrom(); final BareJid key; if (from != null) { From 0ca22f22a9853701ed973e762ef2debd4abf5fa1 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Tue, 2 Apr 2024 18:28:10 +0200 Subject: [PATCH 4/5] Smack 4.4.8 --- CHANGELOG.md | 12 ++++++++++++ version | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d896bc4e4..b413e7f75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Smack Changelog +# 4.4.8 -- 2024-04-02 + +### Improvement + +[SMACK-941](https://igniterealtime.atlassian.net/browse/SMACK-941) Suppress "roster not loaded while processing presence" warning if its caused by the reflected self-presence + +### Bug + +[SMACK-938](https://igniterealtime.atlassian.net/browse/SMACK-938) Busy loop in SmackReactor + +[SMACK-940](https://igniterealtime.atlassian.net/browse/SMACK-940) Ignore IPv6 Zone IDs in incoming streamhost candidates + # 4.4.7 -- 2023-11-25 ### Improvement diff --git a/version b/version index 030279209..f12d1f240 100644 --- a/version +++ b/version @@ -1 +1 @@ -4.4.8-SNAPSHOT +4.4.8 From 951588e4ed3d80222ebb54eec5e4893ea0ec26c7 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Tue, 2 Apr 2024 18:48:17 +0200 Subject: [PATCH 5/5] Smack 4.4.9-SNAPSHOT --- version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version b/version index f12d1f240..ebe9667fc 100644 --- a/version +++ b/version @@ -1 +1 @@ -4.4.8 +4.4.9-SNAPSHOT