mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-15 12:19:54 +01:00
Reject subscription updates with duplicate entries. Bug #65.
This commit is contained in:
@@ -7,10 +7,13 @@ import static org.briarproject.api.messaging.Types.SUBSCRIPTION_UPDATE;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.briarproject.api.FormatException;
|
import org.briarproject.api.FormatException;
|
||||||
import org.briarproject.api.messaging.Group;
|
import org.briarproject.api.messaging.Group;
|
||||||
|
import org.briarproject.api.messaging.GroupId;
|
||||||
import org.briarproject.api.messaging.SubscriptionUpdate;
|
import org.briarproject.api.messaging.SubscriptionUpdate;
|
||||||
import org.briarproject.api.serial.Consumer;
|
import org.briarproject.api.serial.Consumer;
|
||||||
import org.briarproject.api.serial.CountingConsumer;
|
import org.briarproject.api.serial.CountingConsumer;
|
||||||
@@ -31,11 +34,15 @@ class SubscriptionUpdateReader implements StructReader<SubscriptionUpdate> {
|
|||||||
r.addConsumer(counting);
|
r.addConsumer(counting);
|
||||||
// Read the start of the struct
|
// Read the start of the struct
|
||||||
r.readStructStart(SUBSCRIPTION_UPDATE);
|
r.readStructStart(SUBSCRIPTION_UPDATE);
|
||||||
// Read the subscriptions
|
// Read the subscriptions, rejecting duplicates
|
||||||
List<Group> groups = new ArrayList<Group>();
|
List<Group> groups = new ArrayList<Group>();
|
||||||
|
Set<GroupId> ids = new HashSet<GroupId>();
|
||||||
r.readListStart();
|
r.readListStart();
|
||||||
for(int i = 0; i < MAX_SUBSCRIPTIONS && !r.hasListEnd(); i++)
|
for(int i = 0; i < MAX_SUBSCRIPTIONS && !r.hasListEnd(); i++) {
|
||||||
groups.add(groupReader.readStruct(r));
|
Group g = groupReader.readStruct(r);
|
||||||
|
if(!ids.add(g.getId())) throw new FormatException(); // Duplicate
|
||||||
|
groups.add(g);
|
||||||
|
}
|
||||||
r.readListEnd();
|
r.readListEnd();
|
||||||
// Read the version number
|
// Read the version number
|
||||||
long version = r.readInteger();
|
long version = r.readInteger();
|
||||||
|
|||||||
Reference in New Issue
Block a user