Build: #1650 was successful Changes by Florian Schmaus <flo@geekplace.eu>
Code commits
Smack (master)
-
Florian Schmaus <flo@geekplace.eu> d10319f1a0d1e3d90b346396d02ad84092ec4284
Merge branch '4.3'
-
Florian Schmaus <flo@geekplace.eu> c499556d077131c33714452917410dc28c5bce4d
Remove dead code from OmemoService
-
Florian Schmaus <flo@geekplace.eu> 7d7fbe68286d77f60c8f390034ee39f849f42dfa
Do not explicity select the (crypto) Provider in smack-omemo
This makes the system select the "best" available provider.
Also the 'BC' provider in newer Android version does not longer
implement certain Ciphers, which causes an NoSuchAlgorithmException if
the Cipher is requested explicitly by the 'BC' provider:
E/XmppService: XmppServiceConnection - Error while sending pending messages
org.jivesoftware.smackx.omemo.exceptions.CryptoFailedException: java.security.NoSuchAlgorithmException: The BC provider no longer provides an implementation for Cipher.AES/GCM/NoPadding. Please see https://android-developers.googleblog.com/2018/03/cryptography-changes-in-android-p.html for more details.
at org.jivesoftware.smackx.omemo.OmemoService.encrypt(OmemoService.java:375)
at org.jivesoftware.smackx.omemo.OmemoService.createOmemoMessage(OmemoService.java:537)
at org.jivesoftware.smackx.omemo.OmemoManager.encrypt(OmemoManager.java:341)
at org.jivesoftware.smackx.omemo.OmemoManager.encrypt(OmemoManager.java:314)
at es.iecisa.xmppservice.XmppServiceConnection.lambda$sendMessage$0(XmppServiceConnection.java:516)
at es.iecisa.xmppservice.-$$Lambda$XmppServiceConnection$aBU_80chagvypMTSd-aSm7pRQRY.run(Unknown Source:4)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.security.NoSuchAlgorithmException: The BC provider no longer provides an implementation for Cipher.AES/GCM/NoPadding. Please see https://android-developers.googleblog.com/2018/03/cryptography-changes-in-android-p.html for more details.
at sun.security.jca.Providers.checkBouncyCastleDeprecation(Providers.java:563)
at sun.security.jca.Providers.checkBouncyCastleDeprecation(Providers.java:346)
at javax.crypto.Cipher.createCipher(Cipher.java:722)
at javax.crypto.Cipher.getInstance(Cipher.java:717)
at javax.crypto.Cipher.getInstance(Cipher.java:674)
at org.jivesoftware.smackx.omemo.util.OmemoMessageBuilder.setMessage(OmemoMessageBuilder.java:169)
at org.jivesoftware.smackx.omemo.util.OmemoMessageBuilder.<init>(OmemoMessageBuilder.java:116)
at org.jivesoftware.smackx.omemo.OmemoService.encrypt(OmemoService.java:372)
at org.jivesoftware.smackx.omemo.OmemoService.createOmemoMessage(OmemoService.java:537)
at org.jivesoftware.smackx.omemo.OmemoManager.encrypt(OmemoManager.java:341)
at org.jivesoftware.smackx.omemo.OmemoManager.encrypt(OmemoManager.java:314)
at es.iecisa.xmppservice.XmppServiceConnection.lambda$sendMessage$0(XmppServiceConnection.java:516)
at es.iecisa.xmppservice.-$$Lambda$XmppServiceConnection$aBU_80chagvypMTSd-aSm7pRQRY.run(Unknown Source:4)
at java.lang.Thread.run(Thread.java:764)- smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/OmemoService.java (version 7d7fbe68286d77f60c8f390034ee39f849f42dfa) (diffs)
- smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/internal/CipherAndAuthTag.java (version 7d7fbe68286d77f60c8f390034ee39f849f42dfa) (diffs)
- smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoConstants.java (version 7d7fbe68286d77f60c8f390034ee39f849f42dfa) (diffs)
- smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoMessageBuilder.java (version 7d7fbe68286d77f60c8f390034ee39f849f42dfa) (diffs)
-
Florian Schmaus <flo@geekplace.eu> 9f8d13b8cdb53f2e2373a92203c5aa32b09a23fa
Do not explicitly select the Provider in HashManager
Note that we still setup the BouncyCastleProvider so all requested
MessageDigest instances should be avaialble. -
Florian Schmaus <flo@geekplace.eu> d6a90942a45bcae9cf0a54583cdc30b3ee896a6a
Unify Bouncy Castle versions: Add bouncyCastleVersion variable
-
Florian Schmaus <flo@geekplace.eu> 9be498c440e2b10cae4d01b4d0037bfdb90c85cf m
Fix NPE in Roster's presence listeners if 'from' is not set
The NPE is caused by an inbound presence stanza without the 'from'
attribute set. The stacktrace of the NPE is:
FATAL EXCEPTION: Smack Cached Executor
Process: de.fhg.ivi.senetz.mobile.android.mbk.debug, PID: 13365
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Object.hashCode()' on a null object reference
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:944)
at org.jivesoftware.smack.roster.Roster.getPresencesInternal(Roster.java:374)
at org.jivesoftware.smack.roster.Roster.getOrCreatePresencesInternal(Roster.java:388)
at org.jivesoftware.smack.roster.Roster.access$1100(Roster.java:94)
at org.jivesoftware.smack.roster.Roster$PresencePacketListener$1.run(Roster.java:1519)
at org.jivesoftware.smack.AsyncButOrdered$Handler.run(AsyncButOrdered.java:121)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Thanks to Marcel Heckel for reporting this.
Fixes SMACK-861. -
Florian Schmaus <flo@geekplace.eu> 25b3f354216683e568a54b93be1c6a931cd79b26 m
Ensure that shutdown() terminates reader/writer threads
In case an exception happens in connect()/login() the
'disconnectedButResumable' boolean may (still) be set. Which causes
only one of the reader and writer threads to exit, typically the
reader thread, because shutdown() will bail out very early. This
leaves a dangling (writer) thread causing memory leaks and deadlocks
on a subsequent connect()/login(). -
Florian Schmaus <flo@geekplace.eu> 5d46e281fcbd60f34bd96ccbe36faa8072d39354 m
XMPPTCPConnection log when reader/writer threads start and exit
-
Florian Schmaus <flo@geekplace.eu> 927eb5e7d7732ae6b8230d3dd5965fb863fb24be
Add MemoryLeakTest(Util)
to check for the correct operation of what was implemented with
SMACK-383.- smack-core/src/test/java/org/jivesoftware/smack/DummyConnection.java (version 927eb5e7d7732ae6b8230d3dd5965fb863fb24be) (diffs)
- smack-core/src/test/java/org/jivesoftware/smack/util/MemoryLeakTestUtil.java (version 927eb5e7d7732ae6b8230d3dd5965fb863fb24be) (diffs)
- smack-extensions/src/test/java/org/jivesoftware/smackx/muc/MucMemoryLeakTest.java (version 927eb5e7d7732ae6b8230d3dd5965fb863fb24be) (diffs)
-
Florian Schmaus <flo@geekplace.eu> 14f288a763a5f386e62e4cd5f8f9a41b8e0427f0
Introduce RandomUtil
and use it in EncryptedOpenPgpContentElement- smack-core/src/main/java/org/jivesoftware/smack/util/RandomUtil.java (version 14f288a763a5f386e62e4cd5f8f9a41b8e0427f0) (diffs)
- smack-core/src/main/java/org/jivesoftware/smack/util/StringUtils.java (version 14f288a763a5f386e62e4cd5f8f9a41b8e0427f0) (diffs)
- smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/element/EncryptedOpenPgpContentElement.java (version 14f288a763a5f386e62e4cd5f8f9a41b8e0427f0) (diffs)
-
Florian Schmaus <flo@geekplace.eu> ab7d81e7b58d39e1fbebad32a4d492165d4f1783
Use type parameter bounds for the 'to' set in OpenPgpgContentElement
- smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/element/CryptElement.java (version ab7d81e7b58d39e1fbebad32a4d492165d4f1783) (diffs)
- smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/element/EncryptedOpenPgpContentElement.java (version ab7d81e7b58d39e1fbebad32a4d492165d4f1783) (diffs)
- smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/element/OpenPgpContentElement.java (version ab7d81e7b58d39e1fbebad32a4d492165d4f1783) (diffs)
- smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/element/SigncryptElement.java (version ab7d81e7b58d39e1fbebad32a4d492165d4f1783) (diffs)
-
Florian Schmaus <flo@geekplace.eu> 89c0fa4b9933f225cf9deaf0713df5dc0c6a0d31
Let StringUtils.(insecure)randomString() return empty string
in case length is zero. Also do throw a NegativeArraySizeException if
length is negative instead of returning null.
This fixes the following sporadic test issue:
org.jivesoftware.smackx.ox.PainlessOpenPgpProviderTest > encryptDecryptTest FAILED
java.lang.AssertionError
at org.jivesoftware.smack.util.XmlStringBuilder.escape(XmlStringBuilder.java:425)
at org.jivesoftware.smackx.ox.element.EncryptedOpenPgpContentElement.addCommonXml(EncryptedOpenPgpContentElement.java:65)
at org.jivesoftware.smackx.ox.element.CryptElement.toXML(CryptElement.java:51)
at org.jivesoftware.smackx.ox.element.CryptElement.toXML(CryptElement.java:31)
at org.jivesoftware.smack.packet.Element.toXML(Element.java:41)
at org.jivesoftware.smackx.ox.element.OpenPgpContentElement.toInputStream(OpenPgpContentElement.java:186)
at org.jivesoftware.smackx.ox.crypto.PainlessOpenPgpProvider.encrypt(PainlessOpenPgpProvider.java:136)
at org.jivesoftware.smackx.ox.PainlessOpenPgpProviderTest.encryptDecryptTest(PainlessOpenPgpProviderTest.java:155)
because EncryptedOpenPgpContentElement rpad field was sometimes
'null' in case the random function returned '0' as length.