diff --git a/src/ChatCommands.cc b/src/ChatCommands.cc index 6c4a5306..d4776f8c 100644 --- a/src/ChatCommands.cc +++ b/src/ChatCommands.cc @@ -369,18 +369,21 @@ static void proxy_command_get_player_card(shared_ptr, static void server_command_send_client(shared_ptr, shared_ptr, shared_ptr c, const std::u16string& args) { string data = parse_data_string(encode_sjis(args)); + data.resize((data.size() + 3) & (~3)); c->channel.send(data); } static void proxy_command_send_client(shared_ptr, ProxyServer::LinkedSession& session, const std::u16string& args) { string data = parse_data_string(encode_sjis(args)); + data.resize((data.size() + 3) & (~3)); session.client_channel.send(data); } static void proxy_command_send_server(shared_ptr, ProxyServer::LinkedSession& session, const std::u16string& args) { string data = parse_data_string(encode_sjis(args)); + data.resize((data.size() + 3) & (~3)); session.server_channel.send(data); } diff --git a/src/ServerShell.cc b/src/ServerShell.cc index 0e04b7dc..8d3dfcc9 100644 --- a/src/ServerShell.cc +++ b/src/ServerShell.cc @@ -583,12 +583,10 @@ session with ID 17205AE4, run the command `on 17205AE4 sc 1D 00 04 00`.\n\ } else if ((command_name == "sc") || (command_name == "ss")) { string data = parse_data_string(command_args, nullptr, ParseDataFlags::ALLOW_FILES); - if (data.size() & 3) { - throw invalid_argument("data size is not a multiple of 4"); - } if (data.size() == 0) { throw invalid_argument("no data given"); } + data.resize((data.size() + 3) & (~3)); shared_ptr proxy_session; try {