From: AsamK Date: Tue, 23 Feb 2021 20:50:31 +0000 (+0100) Subject: Fix issue with broken sessions X-Git-Tag: v0.8.1~10 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/8249f852f9244cc83698c9330a304604f385daaa?ds=sidebyside Fix issue with broken sessions Fixes #530 --- diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/protocol/JsonSessionStore.java b/lib/src/main/java/org/asamk/signal/manager/storage/protocol/JsonSessionStore.java index 94d2d681..1b5384a4 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/protocol/JsonSessionStore.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/protocol/JsonSessionStore.java @@ -12,6 +12,7 @@ import org.asamk.signal.manager.util.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.whispersystems.libsignal.SignalProtocolAddress; +import org.whispersystems.libsignal.protocol.CiphertextMessage; import org.whispersystems.libsignal.state.SessionRecord; import org.whispersystems.signalservice.api.SignalServiceSessionStore; import org.whispersystems.signalservice.api.push.SignalServiceAddress; @@ -55,9 +56,7 @@ class JsonSessionStore implements SignalServiceSessionStore { return new SessionRecord(info.sessionRecord); } catch (IOException e) { logger.warn("Failed to load session, resetting session: {}", e.getMessage()); - final var sessionRecord = new SessionRecord(); - info.sessionRecord = sessionRecord.serialize(); - return sessionRecord; + return new SessionRecord(); } } } @@ -104,7 +103,16 @@ class JsonSessionStore implements SignalServiceSessionStore { var serviceAddress = resolveSignalServiceAddress(address.getName()); for (var info : sessions) { if (info.address.matches(serviceAddress) && info.deviceId == address.getDeviceId()) { - return true; + final SessionRecord sessionRecord; + try { + sessionRecord = new SessionRecord(info.sessionRecord); + } catch (IOException e) { + logger.warn("Failed to check session: {}", e.getMessage()); + return false; + } + + return sessionRecord.hasSenderChain() + && sessionRecord.getSessionVersion() == CiphertextMessage.CURRENT_VERSION; } } return false;