From: AsamK Date: Sun, 25 Feb 2024 18:41:10 +0000 (+0100) Subject: Prevent crash when receiving already migrated group v1 from storage X-Git-Tag: v0.13.1~8 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/57164ad7fb4db377699f056efd5e9305c614b759 Prevent crash when receiving already migrated group v1 from storage Fixes #1471 --- diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/groups/GroupStore.java b/lib/src/main/java/org/asamk/signal/manager/storage/groups/GroupStore.java index e24816bc..3dac4876 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/groups/GroupStore.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/groups/GroupStore.java @@ -229,20 +229,24 @@ public class GroupStore { public GroupInfoV1 getOrCreateGroupV1(GroupIdV1 groupId) { try (final var connection = database.getConnection()) { - var group = getGroup(connection, groupId); + return getOrCreateGroupV1(connection, groupId); + } catch (SQLException e) { + throw new RuntimeException("Failed read from group store", e); + } + } - if (group != null) { - return group; - } + public GroupInfoV1 getOrCreateGroupV1(final Connection connection, final GroupIdV1 groupId) throws SQLException { + var group = getGroup(connection, groupId); - if (getGroupV2ByV1Id(connection, groupId) == null) { - return new GroupInfoV1(groupId); - } + if (group != null) { + return group; + } - return null; - } catch (SQLException e) { - throw new RuntimeException("Failed read from group store", e); + if (getGroupV2ByV1Id(connection, groupId) == null) { + return new GroupInfoV1(groupId); } + + return null; } public GroupInfoV2 getGroupOrPartialMigrate( diff --git a/lib/src/main/java/org/asamk/signal/manager/syncStorage/GroupV1RecordProcessor.java b/lib/src/main/java/org/asamk/signal/manager/syncStorage/GroupV1RecordProcessor.java index be95591b..14d3c882 100644 --- a/lib/src/main/java/org/asamk/signal/manager/syncStorage/GroupV1RecordProcessor.java +++ b/lib/src/main/java/org/asamk/signal/manager/syncStorage/GroupV1RecordProcessor.java @@ -112,14 +112,16 @@ public final class GroupV1RecordProcessor extends DefaultStorageRecordProcessor< final var groupV1Record = update.newRecord(); final var groupIdV1 = GroupId.v1(groupV1Record.getGroupId()); - final var group = account.getGroupStore().getGroup(connection, groupIdV1); - group.setBlocked(groupV1Record.isBlocked()); - account.getGroupStore().updateGroup(connection, group); - account.getGroupStore() - .storeStorageRecord(connection, - group.getGroupId(), - groupV1Record.getId(), - groupV1Record.toProto().encode()); + final var group = account.getGroupStore().getOrCreateGroupV1(connection, groupIdV1); + if (group != null) { + group.setBlocked(groupV1Record.isBlocked()); + account.getGroupStore().updateGroup(connection, group); + account.getGroupStore() + .storeStorageRecord(connection, + group.getGroupId(), + groupV1Record.getId(), + groupV1Record.toProto().encode()); + } } @Override