diff --git a/common/src/main/java/bisq/common/app/Capabilities.java b/common/src/main/java/bisq/common/app/Capabilities.java index 362a8a5149..45e351d0da 100644 --- a/common/src/main/java/bisq/common/app/Capabilities.java +++ b/common/src/main/java/bisq/common/app/Capabilities.java @@ -96,7 +96,10 @@ public class Capabilities { * @return a {@link Capabilities} object */ public static Capabilities fromIntList(List capabilities) { - return new Capabilities(capabilities.stream().map(integer -> Capability.values()[integer]).collect(Collectors.toSet())); + return new Capabilities(capabilities.stream() + .filter(integer -> integer < Capability.values().length) + .map(integer -> Capability.values()[integer]) + .collect(Collectors.toSet())); } @Override diff --git a/core/src/main/java/bisq/core/dao/state/model/governance/DaoPhase.java b/core/src/main/java/bisq/core/dao/state/model/governance/DaoPhase.java index 4594fd3466..5ae7e13ff1 100644 --- a/core/src/main/java/bisq/core/dao/state/model/governance/DaoPhase.java +++ b/core/src/main/java/bisq/core/dao/state/model/governance/DaoPhase.java @@ -26,6 +26,7 @@ import io.bisq.generated.protobuffer.PB; import java.util.Objects; import lombok.Value; +import lombok.extern.slf4j.Slf4j; import javax.annotation.concurrent.Immutable; @@ -35,6 +36,7 @@ import javax.annotation.concurrent.Immutable; */ @Immutable @Value +@Slf4j public class DaoPhase implements PersistablePayload, ImmutableDaoStateModel { /** @@ -77,7 +79,14 @@ public class DaoPhase implements PersistablePayload, ImmutableDaoStateModel { } public static DaoPhase fromProto(PB.DaoPhase proto) { - return new DaoPhase(Phase.values()[proto.getPhaseOrdinal()], proto.getDuration()); + int ordinal = proto.getPhaseOrdinal(); + if (ordinal >= Phase.values().length) { + log.warn("We tried to access a ordinal outside of the DaoPhase.Phase enum bounds and set it to " + + "UNDEFINED. ordinal={}", ordinal); + return new DaoPhase(Phase.UNDEFINED, 0); + } + + return new DaoPhase(Phase.values()[ordinal], proto.getDuration()); }