From 4747699656653c5e18949128ca1fa03b491fe1b9 Mon Sep 17 00:00:00 2001 From: simoleo89 Date: Sun, 14 Jun 2026 17:31:42 +0200 Subject: [PATCH] fix(rcon): validate room ownership and clothing grants --- .../habbo/messages/rcon/ChangeRoomOwner.java | 31 ++++++++-- .../habbo/messages/rcon/GiveUserClothing.java | 59 ++++++++++++++++++- .../rcon/ChangeRoomOwnerContractTest.java | 39 ++++++++++++ .../rcon/GiveUserClothingContractTest.java | 38 ++++++++++++ 4 files changed, 159 insertions(+), 8 deletions(-) create mode 100644 Emulator/src/test/java/com/eu/habbo/messages/rcon/ChangeRoomOwnerContractTest.java create mode 100644 Emulator/src/test/java/com/eu/habbo/messages/rcon/GiveUserClothingContractTest.java diff --git a/Emulator/src/main/java/com/eu/habbo/messages/rcon/ChangeRoomOwner.java b/Emulator/src/main/java/com/eu/habbo/messages/rcon/ChangeRoomOwner.java index 262b60be..1012c54d 100644 --- a/Emulator/src/main/java/com/eu/habbo/messages/rcon/ChangeRoomOwner.java +++ b/Emulator/src/main/java/com/eu/habbo/messages/rcon/ChangeRoomOwner.java @@ -2,6 +2,7 @@ package com.eu.habbo.messages.rcon; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.rooms.Room; +import com.eu.habbo.habbohotel.users.HabboInfo; import com.google.gson.Gson; public class ChangeRoomOwner extends RCONMessage { @@ -11,15 +12,33 @@ public class ChangeRoomOwner extends RCONMessage { @Override public void handle(Gson gson, JSON json) { + if (json.room_id <= 0 || json.user_id <= 0) { + this.status = RCONMessage.STATUS_ERROR; + this.message = "invalid room or user"; + return; + } + + HabboInfo owner = Emulator.getGameEnvironment().getHabboManager().getHabboInfo(json.user_id); + if (owner == null) { + this.status = RCONMessage.HABBO_NOT_FOUND; + this.message = "user not found"; + return; + } + Room room = Emulator.getGameEnvironment().getRoomManager().loadRoom(json.room_id); - if (room != null) { - room.setOwnerId(json.user_id); - room.setOwnerName(json.username); - room.setNeedsUpdate(true); - room.save(); - Emulator.getGameEnvironment().getRoomManager().unloadRoom(room); + if (room == null) { + this.status = RCONMessage.ROOM_NOT_FOUND; + this.message = "room not found"; + return; } + + room.setOwnerId(owner.getId()); + room.setOwnerName(owner.getUsername()); + room.setNeedsUpdate(true); + room.save(); + Emulator.getGameEnvironment().getRoomManager().unloadRoom(room); + this.message = "updated room owner"; } static class JSON { diff --git a/Emulator/src/main/java/com/eu/habbo/messages/rcon/GiveUserClothing.java b/Emulator/src/main/java/com/eu/habbo/messages/rcon/GiveUserClothing.java index 41b81669..bdd7a57e 100644 --- a/Emulator/src/main/java/com/eu/habbo/messages/rcon/GiveUserClothing.java +++ b/Emulator/src/main/java/com/eu/habbo/messages/rcon/GiveUserClothing.java @@ -12,6 +12,7 @@ import org.slf4j.LoggerFactory; import java.sql.Connection; import java.sql.PreparedStatement; +import java.sql.ResultSet; import java.sql.SQLException; public class GiveUserClothing extends RCONMessage { @@ -23,14 +24,35 @@ public class GiveUserClothing extends RCONMessage