diff options
author | Nick Hudson <nick.hudson@isode.com> | 2014-02-03 20:46:23 (GMT) |
---|---|---|
committer | Nick Hudson <nick.hudson@isode.com> | 2014-02-03 21:54:21 (GMT) |
commit | 535e1a979a164f807aa64bf2df2bb36e7015ff17 (patch) | |
tree | baf2e95bc6f33e99512842cf1ad78c715c45a3c0 /src/com/isode/stroke/queries/Request.java | |
parent | 2a1c515b337bde1ad4a95888902cd7c9a8ef1aab (diff) | |
download | stroke-535e1a979a164f807aa64bf2df2bb36e7015ff17.zip stroke-535e1a979a164f807aa64bf2df2bb36e7015ff17.tar.bz2 |
Check sender on incoming IQ responses
This patch corresponds with the Swiften commit
5f1cb0d768265347bc80862c33f5967f07759b10 whose comment reads
Release-Notes: Fixed a bug whereby the sender of an iq wasn't being
checked before matching it to a request.
Note that since the Swiften change, other modifications have been made
to the affected files, and these modifications are not reflected in
this patch.
Test-information:
Code builds. Ran with MLC to make sure things all seem to work OK.
Change-Id: Ife96925d4d728bc0fe749d6b5b849fbe4e866315
Diffstat (limited to 'src/com/isode/stroke/queries/Request.java')
-rw-r--r-- | src/com/isode/stroke/queries/Request.java | 49 |
1 files changed, 35 insertions, 14 deletions
diff --git a/src/com/isode/stroke/queries/Request.java b/src/com/isode/stroke/queries/Request.java index 6a843a1..50645b4 100644 --- a/src/com/isode/stroke/queries/Request.java +++ b/src/com/isode/stroke/queries/Request.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Isode Limited, London, England. + * Copyright (c) 2010-2014, Isode Limited, London, England. * All rights reserved. */ /* @@ -67,20 +67,41 @@ public abstract class Request implements IQHandler { public boolean handleIQ(IQ iq) { boolean handled = false; if (sent_ && iq.getID().equals(id_)) { - if (iq.getType().equals(IQ.Type.Result)) { - handleResponse(iq.getPayload(payload_), null); - } else { - ErrorPayload errorPayload = iq.getPayload(new ErrorPayload()); - if (errorPayload != null) { - handleResponse(null, errorPayload); - } else { - handleResponse(null, new ErrorPayload(ErrorPayload.Condition.UndefinedCondition)); - } - } - router_.removeHandler(this); - handled = true; - } + if (isCorrectSender(iq.getFrom())) { + + if (iq.getType().equals(IQ.Type.Result)) { + handleResponse(iq.getPayload(payload_), null); + } else { + ErrorPayload errorPayload = iq.getPayload(new ErrorPayload()); + if (errorPayload != null) { + handleResponse(null, errorPayload); + } else { + handleResponse(null, new ErrorPayload(ErrorPayload.Condition.UndefinedCondition)); + } + } + router_.removeHandler(this); + handled = true; + } + } return handled; } + private boolean isCorrectSender(final JID jid) { + if (isAccountJID(receiver_)) { + return isAccountJID(jid); + } + return (jid.compare(receiver_, JID.CompareType.WithResource) == 0); + } + + private boolean isAccountJID(final JID jid) { + // If the router's JID is not set, we don't check anything + if (!router_.getJID().isValid()) { + return true; + } + + return jid.isValid() ? + router_.getJID().compare(jid, JID.CompareType.WithoutResource) == 0 : true; + } + + }
\ No newline at end of file |