don't crash on broken base64 in omemo messages. fixes #1934
This commit is contained in:
parent
1d79a677c8
commit
f7933c26d7
|
@ -99,7 +99,7 @@ public class XmppAxolotlMessage {
|
||||||
case KEYTAG:
|
case KEYTAG:
|
||||||
try {
|
try {
|
||||||
Integer recipientId = Integer.parseInt(keyElement.getAttribute(REMOTEID));
|
Integer recipientId = Integer.parseInt(keyElement.getAttribute(REMOTEID));
|
||||||
byte[] key = Base64.decode(keyElement.getContent(), Base64.DEFAULT);
|
byte[] key = Base64.decode(keyElement.getContent().trim(), Base64.DEFAULT);
|
||||||
this.keys.put(recipientId, key);
|
this.keys.put(recipientId, key);
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
throw new IllegalArgumentException(e);
|
throw new IllegalArgumentException(e);
|
||||||
|
@ -109,7 +109,7 @@ public class XmppAxolotlMessage {
|
||||||
if (this.iv != null) {
|
if (this.iv != null) {
|
||||||
throw new IllegalArgumentException("Duplicate iv entry");
|
throw new IllegalArgumentException("Duplicate iv entry");
|
||||||
}
|
}
|
||||||
iv = Base64.decode(keyElement.getContent(), Base64.DEFAULT);
|
iv = Base64.decode(keyElement.getContent().trim(), Base64.DEFAULT);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.w(Config.LOGTAG, "Unexpected element in header: " + keyElement.toString());
|
Log.w(Config.LOGTAG, "Unexpected element in header: " + keyElement.toString());
|
||||||
|
@ -118,7 +118,7 @@ public class XmppAxolotlMessage {
|
||||||
}
|
}
|
||||||
Element payloadElement = axolotlMessage.findChild(PAYLOAD);
|
Element payloadElement = axolotlMessage.findChild(PAYLOAD);
|
||||||
if (payloadElement != null) {
|
if (payloadElement != null) {
|
||||||
ciphertext = Base64.decode(payloadElement.getContent(), Base64.DEFAULT);
|
ciphertext = Base64.decode(payloadElement.getContent().trim(), Base64.DEFAULT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -146,17 +146,23 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
|
||||||
}
|
}
|
||||||
|
|
||||||
private Message parseAxolotlChat(Element axolotlMessage, Jid from, Conversation conversation, int status) {
|
private Message parseAxolotlChat(Element axolotlMessage, Jid from, Conversation conversation, int status) {
|
||||||
Message finishedMessage = null;
|
|
||||||
AxolotlService service = conversation.getAccount().getAxolotlService();
|
AxolotlService service = conversation.getAccount().getAxolotlService();
|
||||||
XmppAxolotlMessage xmppAxolotlMessage = XmppAxolotlMessage.fromElement(axolotlMessage, from.toBareJid());
|
XmppAxolotlMessage xmppAxolotlMessage;
|
||||||
|
try {
|
||||||
|
xmppAxolotlMessage = XmppAxolotlMessage.fromElement(axolotlMessage, from.toBareJid());
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.d(Config.LOGTAG,conversation.getAccount().getJid().toBareJid()+": invalid omemo message received "+e.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
XmppAxolotlMessage.XmppAxolotlPlaintextMessage plaintextMessage = service.processReceivingPayloadMessage(xmppAxolotlMessage);
|
XmppAxolotlMessage.XmppAxolotlPlaintextMessage plaintextMessage = service.processReceivingPayloadMessage(xmppAxolotlMessage);
|
||||||
if(plaintextMessage != null) {
|
if(plaintextMessage != null) {
|
||||||
finishedMessage = new Message(conversation, plaintextMessage.getPlaintext(), Message.ENCRYPTION_AXOLOTL, status);
|
Message finishedMessage = new Message(conversation, plaintextMessage.getPlaintext(), Message.ENCRYPTION_AXOLOTL, status);
|
||||||
finishedMessage.setFingerprint(plaintextMessage.getFingerprint());
|
finishedMessage.setFingerprint(plaintextMessage.getFingerprint());
|
||||||
Log.d(Config.LOGTAG, AxolotlService.getLogprefix(finishedMessage.getConversation().getAccount())+" Received Message with session fingerprint: "+plaintextMessage.getFingerprint());
|
Log.d(Config.LOGTAG, AxolotlService.getLogprefix(finishedMessage.getConversation().getAccount())+" Received Message with session fingerprint: "+plaintextMessage.getFingerprint());
|
||||||
}
|
|
||||||
|
|
||||||
return finishedMessage;
|
return finishedMessage;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Invite {
|
private class Invite {
|
||||||
|
|
Loading…
Reference in a new issue