Skip to content

Commit

Permalink
Ignore missing members in incoming group updates
Browse files Browse the repository at this point in the history
Previously, updateNumbers would throw an Error, so the whole group
update was discarded.

Signal-Android handles this the same way in
GroupMessageProcessor.handleGroupUpdate().

Closes #1056
  • Loading branch information
haffenloher authored and liliakai committed Feb 9, 2017
1 parent 76c165a commit 04f0142
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 24 deletions.
12 changes: 1 addition & 11 deletions js/libtextsecure.js
Expand Up @@ -36987,19 +36987,9 @@ Internal.SessionLock.queueJobForNumber = function queueJobForNumber(number, runJ
if (numbers.filter(textsecure.utils.isNumberSane).length < numbers.length)
throw new Error("Invalid number in new group members");

if (group.numbers.filter(function(number) { return numbers.indexOf(number) < 0 }).length > 0)
throw new Error("Attempted to remove numbers from group with an UPDATE");

var added = numbers.filter(function(number) { return group.numbers.indexOf(number) < 0; });

return textsecure.storage.groups.addNumbers(groupId, added).then(function(newGroup) {
if (numbers.filter(function(number) { return newGroup.indexOf(number) < 0; }).length != 0 ||
newGroup.filter(function(number) { return numbers.indexOf(number) < 0; }).length != 0) {
throw new Error("Error calculating group member difference");
}

return added;
});
return textsecure.storage.groups.addNumbers(groupId, added);
});
},

Expand Down
4 changes: 2 additions & 2 deletions js/models/messages.js
Expand Up @@ -345,10 +345,10 @@
groupId : dataMessage.group.id,
name : dataMessage.group.name,
avatar : dataMessage.group.avatar,
members : dataMessage.group.members,
members : _.union(dataMessage.group.members, conversation.get('members')),
};
group_update = conversation.changedAttributes(_.pick(dataMessage.group, 'name', 'avatar')) || {};
var difference = _.difference(dataMessage.group.members, conversation.get('members'));
var difference = _.difference(attributes.members, conversation.get('members'));
if (difference.length > 0) {
group_update.joined = difference;
}
Expand Down
12 changes: 1 addition & 11 deletions libtextsecure/storage/groups.js
Expand Up @@ -139,19 +139,9 @@
if (numbers.filter(textsecure.utils.isNumberSane).length < numbers.length)
throw new Error("Invalid number in new group members");

if (group.numbers.filter(function(number) { return numbers.indexOf(number) < 0 }).length > 0)
throw new Error("Attempted to remove numbers from group with an UPDATE");

var added = numbers.filter(function(number) { return group.numbers.indexOf(number) < 0; });

return textsecure.storage.groups.addNumbers(groupId, added).then(function(newGroup) {
if (numbers.filter(function(number) { return newGroup.indexOf(number) < 0; }).length != 0 ||
newGroup.filter(function(number) { return numbers.indexOf(number) < 0; }).length != 0) {
throw new Error("Error calculating group member difference");
}

return added;
});
return textsecure.storage.groups.addNumbers(groupId, added);
});
},

Expand Down

1 comment on commit 04f0142

@WhisperBTC
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! BitHub has sent payment of $82.45USD for this commit.

Please sign in to comment.