From 79166e9b2f43ff2ab2e0c9bb4f64de995e5bc1e7 Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Fri, 4 Apr 2014 01:06:22 +0100 Subject: [PATCH] Reject subscription updates with duplicate entries. Bug #65. --- .../messaging/SubscriptionUpdateReader.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/briar-core/src/org/briarproject/messaging/SubscriptionUpdateReader.java b/briar-core/src/org/briarproject/messaging/SubscriptionUpdateReader.java index f9db08a266..983be4a049 100644 --- a/briar-core/src/org/briarproject/messaging/SubscriptionUpdateReader.java +++ b/briar-core/src/org/briarproject/messaging/SubscriptionUpdateReader.java @@ -7,10 +7,13 @@ import static org.briarproject.api.messaging.Types.SUBSCRIPTION_UPDATE; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.briarproject.api.FormatException; import org.briarproject.api.messaging.Group; +import org.briarproject.api.messaging.GroupId; import org.briarproject.api.messaging.SubscriptionUpdate; import org.briarproject.api.serial.Consumer; import org.briarproject.api.serial.CountingConsumer; @@ -31,11 +34,15 @@ class SubscriptionUpdateReader implements StructReader<SubscriptionUpdate> { r.addConsumer(counting); // Read the start of the struct r.readStructStart(SUBSCRIPTION_UPDATE); - // Read the subscriptions + // Read the subscriptions, rejecting duplicates List<Group> groups = new ArrayList<Group>(); + Set<GroupId> ids = new HashSet<GroupId>(); r.readListStart(); - for(int i = 0; i < MAX_SUBSCRIPTIONS && !r.hasListEnd(); i++) - groups.add(groupReader.readStruct(r)); + for(int i = 0; i < MAX_SUBSCRIPTIONS && !r.hasListEnd(); i++) { + Group g = groupReader.readStruct(r); + if(!ids.add(g.getId())) throw new FormatException(); // Duplicate + groups.add(g); + } r.readListEnd(); // Read the version number long version = r.readInteger(); -- GitLab