1
0
Fork 0
mirror of https://codeberg.org/Mercury-IM/Smack synced 2025-09-10 18:59:41 +02:00

Create accurate filter for matching on from address (SMACK-71)

Smack contains two PacketFilters to filter on the from address.
FromContainsFilter simply does a substring match, which is problematic
as explained in SMACK-71. FromMatchesFilter partially fixes this
weakness, but it still uses String#startsWith to filter on bare
addresses. For example, when setup to match all JIDs with bare JID
"foo@example.co", it will still match "foo@example.com".

This commit changes FromMatchesFilter to test equality with the bare
from instead of startsWith with the full from.

Moreover, we convert all uses of FromContainsFilter to FromMatchesFilter
and remove FromContainsFilter. Additionally, the unused ToContainsFilter
(which as the same weaknesses) is removed, too.
This commit is contained in:
Lars Noschinski 2014-03-05 00:00:02 +01:00
parent 0e49b23687
commit 980047c4e1
7 changed files with 14 additions and 120 deletions

View file

@ -262,7 +262,7 @@ public class AgentSession {
presence.addExtension(new DefaultPacketExtension(AgentStatus.ELEMENT_NAME,
AgentStatus.NAMESPACE));
PacketCollector collector = this.connection.createPacketCollector(new AndFilter(new PacketTypeFilter(Presence.class), new FromContainsFilter(workgroupJID)));
PacketCollector collector = this.connection.createPacketCollector(new AndFilter(new PacketTypeFilter(Presence.class), new FromMatchesFilter(workgroupJID)));
connection.sendPacket(presence);
@ -359,7 +359,7 @@ public class AgentSession {
presence.addExtension(agentStatus);
presence.addExtension(new MetaData(this.metaData));
PacketCollector collector = this.connection.createPacketCollector(new AndFilter(new PacketTypeFilter(Presence.class), new FromContainsFilter(workgroupJID)));
PacketCollector collector = this.connection.createPacketCollector(new AndFilter(new PacketTypeFilter(Presence.class), new FromMatchesFilter(workgroupJID)));
this.connection.sendPacket(presence);
@ -402,7 +402,7 @@ public class AgentSession {
presence.addExtension(new MetaData(this.metaData));
PacketCollector collector = this.connection.createPacketCollector(new AndFilter(new PacketTypeFilter(Presence.class),
new FromContainsFilter(workgroupJID)));
new FromMatchesFilter(workgroupJID)));
this.connection.sendPacket(presence);

View file

@ -159,7 +159,7 @@ public class Workgroup {
Presence directedPresence = new Presence(Presence.Type.available);
directedPresence.setTo(workgroupJID);
PacketFilter typeFilter = new PacketTypeFilter(Presence.class);
PacketFilter fromFilter = new FromContainsFilter(workgroupJID);
PacketFilter fromFilter = new FromMatchesFilter(workgroupJID);
PacketCollector collector = connection.createPacketCollector(new AndFilter(fromFilter,
typeFilter));