From 305d1ca097168ad1d7918b4eb4a2550b025b765a Mon Sep 17 00:00:00 2001 From: simoleo89 Date: Wed, 17 Jun 2026 20:38:40 +0200 Subject: [PATCH] fix(wired): guard extra selector payloads --- .../wired/extra/WiredExtraAnimationTime.java | 2 +- .../extra/WiredExtraContextVariable.java | 2 +- .../wired/extra/WiredExtraExecutionLimit.java | 2 +- .../wired/extra/WiredExtraFilterFurni.java | 2 +- .../wired/extra/WiredExtraFilterUser.java | 2 +- .../wired/extra/WiredExtraFurniVariable.java | 2 +- .../wired/extra/WiredExtraMoveCarryUsers.java | 2 +- .../wired/extra/WiredExtraMovePhysics.java | 2 +- .../wired/extra/WiredExtraOrEval.java | 2 +- .../wired/extra/WiredExtraPayloadGuard.java | 20 +++++++++++++++++++ .../wired/extra/WiredExtraRandom.java | 2 +- .../wired/extra/WiredExtraRoomVariable.java | 2 +- .../extra/WiredExtraTextInputVariable.java | 2 +- .../extra/WiredExtraTextOutputFurniName.java | 2 +- .../extra/WiredExtraTextOutputUsername.java | 2 +- .../extra/WiredExtraTextOutputVariable.java | 2 +- .../wired/extra/WiredExtraUserVariable.java | 2 +- .../wired/extra/WiredExtraVariableEcho.java | 4 ++-- .../extra/WiredExtraVariableFilterBase.java | 2 +- .../WiredExtraVariableLevelUpSystem.java | 2 +- .../extra/WiredExtraVariableReference.java | 4 ++-- .../WiredExtraVariableTextConnector.java | 2 +- .../extra/WiredVariableReferenceSupport.java | 4 ++-- .../selector/WiredEffectFurniAltitude.java | 2 +- .../wired/selector/WiredEffectFurniArea.java | 2 +- .../selector/WiredEffectFurniByType.java | 2 +- .../WiredEffectFurniNeighborhood.java | 2 +- .../selector/WiredEffectFurniOnFurni.java | 2 +- .../wired/selector/WiredEffectFurniPicks.java | 2 +- .../selector/WiredEffectFurniSignal.java | 2 +- .../wired/selector/WiredEffectUsersArea.java | 2 +- .../selector/WiredEffectUsersByAction.java | 2 +- .../selector/WiredEffectUsersByName.java | 2 +- .../selector/WiredEffectUsersByType.java | 2 +- .../wired/selector/WiredEffectUsersGroup.java | 2 +- .../selector/WiredEffectUsersHandItem.java | 2 +- .../WiredEffectUsersNeighborhood.java | 2 +- .../selector/WiredEffectUsersOnFurni.java | 2 +- .../selector/WiredEffectUsersSignal.java | 2 +- .../wired/selector/WiredEffectUsersTeam.java | 2 +- .../WiredEffectVariableSelectorBase.java | 2 +- .../selector/WiredSelectorPayloadGuard.java | 20 +++++++++++++++++++ .../extra/WiredExtraPayloadGuardTest.java | 13 ++++++++++++ .../WiredSelectorPayloadGuardTest.java | 13 ++++++++++++ 44 files changed, 109 insertions(+), 43 deletions(-) create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraPayloadGuard.java create mode 100644 Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredSelectorPayloadGuard.java create mode 100644 Emulator/src/test/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraPayloadGuardTest.java create mode 100644 Emulator/src/test/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredSelectorPayloadGuardTest.java diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraAnimationTime.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraAnimationTime.java index 2c9a1def..61f03131 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraAnimationTime.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraAnimationTime.java @@ -80,7 +80,7 @@ public class WiredExtraAnimationTime extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); this.durationMs = normalizeDuration((data != null) ? data.durationMs : WiredMovementsComposer.DEFAULT_DURATION); return; } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraContextVariable.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraContextVariable.java index ce0ee961..4b10efec 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraContextVariable.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraContextVariable.java @@ -84,7 +84,7 @@ public class WiredExtraContextVariable extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); if (data != null) { this.variableName = WiredVariableNameValidator.normalizeLegacy(data.variableName); diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraExecutionLimit.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraExecutionLimit.java index f616b855..cf9b6284 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraExecutionLimit.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraExecutionLimit.java @@ -86,7 +86,7 @@ public class WiredExtraExecutionLimit extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); if (data != null) { this.maxExecutions = normalizeExecutions(data.maxExecutions); diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraFilterFurni.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraFilterFurni.java index 293b5fbf..5a584f80 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraFilterFurni.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraFilterFurni.java @@ -78,7 +78,7 @@ public class WiredExtraFilterFurni extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); this.amount = normalizeAmount((data != null) ? data.amount : 0); return; } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraFilterUser.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraFilterUser.java index bdc9c6c6..5ac9e7ac 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraFilterUser.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraFilterUser.java @@ -78,7 +78,7 @@ public class WiredExtraFilterUser extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); this.amount = normalizeAmount((data != null) ? data.amount : 0); return; } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraFurniVariable.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraFurniVariable.java index 7a2dcd7d..bf26ec80 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraFurniVariable.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraFurniVariable.java @@ -89,7 +89,7 @@ public class WiredExtraFurniVariable extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); if (data != null) { this.variableName = WiredVariableNameValidator.normalizeLegacy(data.variableName); diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraMoveCarryUsers.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraMoveCarryUsers.java index 401f5cb4..f73f114f 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraMoveCarryUsers.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraMoveCarryUsers.java @@ -77,7 +77,7 @@ public class WiredExtraMoveCarryUsers extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); if (data != null) { this.carryMode = this.normalizeCarryMode(data.carryMode); diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraMovePhysics.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraMovePhysics.java index cd890418..19565417 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraMovePhysics.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraMovePhysics.java @@ -97,7 +97,7 @@ public class WiredExtraMovePhysics extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); if (data != null) { this.keepAltitude = data.keepAltitude; diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraOrEval.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraOrEval.java index 548466b3..af39c8c5 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraOrEval.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraOrEval.java @@ -128,7 +128,7 @@ public class WiredExtraOrEval extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); if (data != null) { this.evaluationMode = normalizeEvaluationMode(data.evaluationMode); diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraPayloadGuard.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraPayloadGuard.java new file mode 100644 index 00000000..bda90438 --- /dev/null +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraPayloadGuard.java @@ -0,0 +1,20 @@ +package com.eu.habbo.habbohotel.items.interactions.wired.extra; + +import com.eu.habbo.habbohotel.wired.core.WiredManager; + +final class WiredExtraPayloadGuard { + private WiredExtraPayloadGuard() { + } + + static T fromJson(String wiredData, Class type) { + if (wiredData == null || !wiredData.startsWith("{")) { + return null; + } + + try { + return WiredManager.getGson().fromJson(wiredData, type); + } catch (RuntimeException e) { + return null; + } + } +} diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraRandom.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraRandom.java index c79df874..4cfe670e 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraRandom.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraRandom.java @@ -92,7 +92,7 @@ public class WiredExtraRandom extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); this.pickAmount = normalizePickAmount((data != null) ? data.pickAmount : DEFAULT_PICK_AMOUNT); this.skipExecutions = normalizeSkipExecutions((data != null) ? data.skipExecutions : DEFAULT_SKIP_EXECUTIONS); return; diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraRoomVariable.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraRoomVariable.java index 3481fc67..703761e9 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraRoomVariable.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraRoomVariable.java @@ -91,7 +91,7 @@ public class WiredExtraRoomVariable extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); if (data != null) { this.variableName = WiredVariableNameValidator.normalizeLegacy(data.variableName); diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTextInputVariable.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTextInputVariable.java index 89aa8f0e..c557da2e 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTextInputVariable.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTextInputVariable.java @@ -110,7 +110,7 @@ public class WiredExtraTextInputVariable extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); if (data != null) { this.variableToken = normalizeVariableToken((data.variableToken != null) diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTextOutputFurniName.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTextOutputFurniName.java index a6c21d93..44ad8745 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTextOutputFurniName.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTextOutputFurniName.java @@ -131,7 +131,7 @@ public class WiredExtraTextOutputFurniName extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); if (data != null) { this.placeholderName = normalizePlaceholderName(data.placeholderName); diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTextOutputUsername.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTextOutputUsername.java index 72fd5821..090f8975 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTextOutputUsername.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTextOutputUsername.java @@ -88,7 +88,7 @@ public class WiredExtraTextOutputUsername extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); if (data != null) { this.placeholderName = normalizePlaceholderName(data.placeholderName); diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTextOutputVariable.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTextOutputVariable.java index 9e9c9beb..d3fc6e90 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTextOutputVariable.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraTextOutputVariable.java @@ -181,7 +181,7 @@ public class WiredExtraTextOutputVariable extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); if (data != null) { this.targetType = normalizeTargetType(data.targetType); diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraUserVariable.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraUserVariable.java index f02a8571..32d13a78 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraUserVariable.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraUserVariable.java @@ -90,7 +90,7 @@ public class WiredExtraUserVariable extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); if (data != null) { this.variableName = WiredVariableNameValidator.normalizeLegacy(data.variableName); diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableEcho.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableEcho.java index 0dd43827..9ede2712 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableEcho.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableEcho.java @@ -148,7 +148,7 @@ public class WiredExtraVariableEcho extends InteractionWiredExtra { return; } - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); if (data == null) { return; } @@ -488,7 +488,7 @@ public class WiredExtraVariableEcho extends InteractionWiredExtra { return new ConfigData(); } - ConfigData config = WiredManager.getGson().fromJson(value, ConfigData.class); + ConfigData config = WiredExtraPayloadGuard.fromJson(value, ConfigData.class); return (config != null) ? config : new ConfigData(); } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableFilterBase.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableFilterBase.java index a11da8db..76417c3d 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableFilterBase.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableFilterBase.java @@ -215,7 +215,7 @@ public abstract class WiredExtraVariableFilterBase extends InteractionWiredExtra String wiredData = set.getString("wired_data"); if (wiredData == null || wiredData.isEmpty() || !wiredData.startsWith("{")) return; - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); if (data == null) return; this.sortBy = normalizeSortBy(data.sortBy); diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableLevelUpSystem.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableLevelUpSystem.java index 12afd167..36bff627 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableLevelUpSystem.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableLevelUpSystem.java @@ -188,7 +188,7 @@ public class WiredExtraVariableLevelUpSystem extends InteractionWiredExtra { try { if (value.trim().startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(value, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(value, JsonData.class); return (data != null) ? data : new JsonData(); } } catch (Exception ignored) { diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableReference.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableReference.java index 96970464..cce075cc 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableReference.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableReference.java @@ -120,7 +120,7 @@ public class WiredExtraVariableReference extends InteractionWiredExtra { return; } - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); if (data == null) { return; } @@ -230,7 +230,7 @@ public class WiredExtraVariableReference extends InteractionWiredExtra { return new ConfigData(); } - ConfigData config = WiredManager.getGson().fromJson(value, ConfigData.class); + ConfigData config = WiredExtraPayloadGuard.fromJson(value, ConfigData.class); return (config != null) ? config : new ConfigData(); } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableTextConnector.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableTextConnector.java index 2dda3c39..14e6093f 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableTextConnector.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraVariableTextConnector.java @@ -84,7 +84,7 @@ public class WiredExtraVariableTextConnector extends InteractionWiredExtra { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredExtraPayloadGuard.fromJson(wiredData, JsonData.class); if (data != null) { this.setMappingsText(data.mappingsText); diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredVariableReferenceSupport.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredVariableReferenceSupport.java index 344524dc..f2e26c61 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredVariableReferenceSupport.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredVariableReferenceSupport.java @@ -338,7 +338,7 @@ public final class WiredVariableReferenceSupport { return null; } - UserDefinitionData data = WiredManager.getGson().fromJson(wiredData, UserDefinitionData.class); + UserDefinitionData data = WiredExtraPayloadGuard.fromJson(wiredData, UserDefinitionData.class); if (data == null) { return null; } @@ -352,7 +352,7 @@ public final class WiredVariableReferenceSupport { return null; } - RoomDefinitionData data = WiredManager.getGson().fromJson(wiredData, RoomDefinitionData.class); + RoomDefinitionData data = WiredExtraPayloadGuard.fromJson(wiredData, RoomDefinitionData.class); if (data == null) { return null; } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniAltitude.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniAltitude.java index 24029d04..3e93d78b 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniAltitude.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniAltitude.java @@ -120,7 +120,7 @@ public class WiredEffectFurniAltitude extends InteractionWiredEffect { return; } - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); if (data == null) { return; } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniArea.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniArea.java index 2296c9a5..f6cec608 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniArea.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniArea.java @@ -115,7 +115,7 @@ public class WiredEffectFurniArea extends InteractionWiredEffect { String wiredData = set.getString("wired_data"); if (wiredData != null && wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); this.rootX = data.rootX; this.rootY = data.rootY; this.areaWidth = data.width; diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniByType.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniByType.java index dd4f73c4..81df1116 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniByType.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniByType.java @@ -170,7 +170,7 @@ public class WiredEffectFurniByType extends InteractionWiredEffect { public void loadWiredData(ResultSet set, Room room) throws SQLException { String wiredData = set.getString("wired_data"); if (wiredData != null && wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); this.sourceType = normalizeSourceType(data.sourceType); this.matchState = data.matchState; this.filterExisting = data.filterExisting; diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniNeighborhood.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniNeighborhood.java index 8e175a25..657cee1e 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniNeighborhood.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniNeighborhood.java @@ -329,7 +329,7 @@ public class WiredEffectFurniNeighborhood extends InteractionWiredEffect { public void loadWiredData(ResultSet set, Room room) throws SQLException { String wiredData = set.getString("wired_data"); if (wiredData != null && wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); this.sourceType = data.sourceType; this.filterExisting = data.filterExisting; this.invert = data.invert; diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniOnFurni.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniOnFurni.java index 5ebc443b..87e8cd5f 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniOnFurni.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniOnFurni.java @@ -156,7 +156,7 @@ public class WiredEffectFurniOnFurni extends InteractionWiredEffect { return; } - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); if (data == null) { return; } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniPicks.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniPicks.java index df012d6a..1d0aeaef 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniPicks.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniPicks.java @@ -110,7 +110,7 @@ public class WiredEffectFurniPicks extends InteractionWiredEffect { return; } - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); if (data == null) { return; } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniSignal.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniSignal.java index 00f2c635..49050dc7 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniSignal.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectFurniSignal.java @@ -96,7 +96,7 @@ public class WiredEffectFurniSignal extends InteractionWiredEffect { return; } - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); if (data == null) { return; } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersArea.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersArea.java index fe3e89db..f7693498 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersArea.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersArea.java @@ -101,7 +101,7 @@ public class WiredEffectUsersArea extends InteractionWiredEffect { String wiredData = set.getString("wired_data"); if (wiredData != null && wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); this.rootX = data.rootX; this.rootY = data.rootY; this.areaWidth = data.width; diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersByAction.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersByAction.java index 7f5edf79..2896f834 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersByAction.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersByAction.java @@ -120,7 +120,7 @@ public class WiredEffectUsersByAction extends InteractionWiredEffect { return; } - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); if (data == null) { return; } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersByName.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersByName.java index cd0b1b25..1bf93abe 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersByName.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersByName.java @@ -110,7 +110,7 @@ public class WiredEffectUsersByName extends InteractionWiredEffect { } if (wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); if (data == null) { return; } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersByType.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersByType.java index 9b73aa37..71517c65 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersByType.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersByType.java @@ -95,7 +95,7 @@ public class WiredEffectUsersByType extends InteractionWiredEffect { return; } - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); if (data == null) { return; } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersGroup.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersGroup.java index cc78d186..9689179c 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersGroup.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersGroup.java @@ -109,7 +109,7 @@ public class WiredEffectUsersGroup extends InteractionWiredEffect { return; } - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); if (data == null) { return; } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersHandItem.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersHandItem.java index c40c921e..552ace43 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersHandItem.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersHandItem.java @@ -92,7 +92,7 @@ public class WiredEffectUsersHandItem extends InteractionWiredEffect { return; } - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); if (data == null) { return; } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersNeighborhood.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersNeighborhood.java index 454d12d2..0caa143b 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersNeighborhood.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersNeighborhood.java @@ -333,7 +333,7 @@ public class WiredEffectUsersNeighborhood extends InteractionWiredEffect { public void loadWiredData(ResultSet set, Room room) throws SQLException { String wiredData = set.getString("wired_data"); if (wiredData != null && wiredData.startsWith("{")) { - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); this.sourceType = data.sourceType; this.filterExisting = data.filterExisting; this.invert = data.invert; diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersOnFurni.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersOnFurni.java index f0d350a6..912bf23e 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersOnFurni.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersOnFurni.java @@ -142,7 +142,7 @@ public class WiredEffectUsersOnFurni extends InteractionWiredEffect { return; } - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); if (data == null) { return; } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersSignal.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersSignal.java index 517f0116..8adfaaa4 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersSignal.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersSignal.java @@ -90,7 +90,7 @@ public class WiredEffectUsersSignal extends InteractionWiredEffect { return; } - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); if (data == null) { return; } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersTeam.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersTeam.java index 7e03100e..0f2c7006 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersTeam.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectUsersTeam.java @@ -95,7 +95,7 @@ public class WiredEffectUsersTeam extends InteractionWiredEffect { return; } - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); if (data == null) { return; } diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectVariableSelectorBase.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectVariableSelectorBase.java index b28ea944..a142941b 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectVariableSelectorBase.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredEffectVariableSelectorBase.java @@ -222,7 +222,7 @@ public abstract class WiredEffectVariableSelectorBase extends InteractionWiredEf String wiredData = set.getString("wired_data"); if (wiredData == null || wiredData.isEmpty() || !wiredData.startsWith("{")) return; - JsonData data = WiredManager.getGson().fromJson(wiredData, JsonData.class); + JsonData data = WiredSelectorPayloadGuard.fromJson(wiredData, JsonData.class); if (data == null) return; this.selectByValue = data.selectByValue; diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredSelectorPayloadGuard.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredSelectorPayloadGuard.java new file mode 100644 index 00000000..880ff95f --- /dev/null +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredSelectorPayloadGuard.java @@ -0,0 +1,20 @@ +package com.eu.habbo.habbohotel.items.interactions.wired.selector; + +import com.eu.habbo.habbohotel.wired.core.WiredManager; + +final class WiredSelectorPayloadGuard { + private WiredSelectorPayloadGuard() { + } + + static T fromJson(String wiredData, Class type) { + if (wiredData == null || !wiredData.startsWith("{")) { + return null; + } + + try { + return WiredManager.getGson().fromJson(wiredData, type); + } catch (RuntimeException e) { + return null; + } + } +} diff --git a/Emulator/src/test/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraPayloadGuardTest.java b/Emulator/src/test/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraPayloadGuardTest.java new file mode 100644 index 00000000..19993f1a --- /dev/null +++ b/Emulator/src/test/java/com/eu/habbo/habbohotel/items/interactions/wired/extra/WiredExtraPayloadGuardTest.java @@ -0,0 +1,13 @@ +package com.eu.habbo.habbohotel.items.interactions.wired.extra; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNull; + +class WiredExtraPayloadGuardTest { + @Test + void malformedJsonReturnsNull() { + assertNull(WiredExtraPayloadGuard.fromJson("{broken", WiredExtraAnimationTime.JsonData.class)); + assertNull(WiredExtraPayloadGuard.fromJson(null, WiredExtraAnimationTime.JsonData.class)); + } +} diff --git a/Emulator/src/test/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredSelectorPayloadGuardTest.java b/Emulator/src/test/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredSelectorPayloadGuardTest.java new file mode 100644 index 00000000..a8554992 --- /dev/null +++ b/Emulator/src/test/java/com/eu/habbo/habbohotel/items/interactions/wired/selector/WiredSelectorPayloadGuardTest.java @@ -0,0 +1,13 @@ +package com.eu.habbo.habbohotel.items.interactions.wired.selector; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNull; + +class WiredSelectorPayloadGuardTest { + @Test + void malformedJsonReturnsNull() { + assertNull(WiredSelectorPayloadGuard.fromJson("{broken", WiredEffectFurniArea.JsonData.class)); + assertNull(WiredSelectorPayloadGuard.fromJson(null, WiredEffectFurniArea.JsonData.class)); + } +}