Only cache session if successfully established

Andreas Straub created

When receiving a message, only remember the XmppAxolotlSession wrapper
if the prospective session was actually established. This prevents us
from erroneously adding empty sessions that are never established using
received PreKeyWhisperMessages, which would lead to errors if we try to
use them for sending.

Change summary

src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java | 7 
1 file changed, 6 insertions(+), 1 deletion(-)

Detailed changes

src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java 🔗

@@ -944,12 +944,13 @@ public class AxolotlService {
 		AxolotlAddress senderAddress = new AxolotlAddress(message.getFrom().toString(),
 				message.getSenderDeviceId());
 
+		boolean newSession = false;
 		XmppAxolotlSession session = sessions.get(senderAddress);
 		if (session == null) {
 			Log.d(Config.LOGTAG, "Account: "+account.getJid()+" No axolotl session found while parsing received message " + message);
 			// TODO: handle this properly
 			session = new XmppAxolotlSession(axolotlStore, senderAddress);
-			sessions.put(senderAddress,session);
+			newSession = true;
 		}
 
 		for (XmppAxolotlMessage.XmppAxolotlMessageHeader header : message.getHeaders()) {
@@ -969,6 +970,10 @@ public class AxolotlService {
 			}
 		}
 
+		if (newSession && plaintextMessage != null) {
+			sessions.put(senderAddress,session);
+		}
+
 		return plaintextMessage;
 	}
 }