allow uneven command sizes in sc/ss command data
This commit is contained in:
@@ -369,18 +369,21 @@ static void proxy_command_get_player_card(shared_ptr<ServerState>,
|
|||||||
static void server_command_send_client(shared_ptr<ServerState>, shared_ptr<Lobby>,
|
static void server_command_send_client(shared_ptr<ServerState>, shared_ptr<Lobby>,
|
||||||
shared_ptr<Client> c, const std::u16string& args) {
|
shared_ptr<Client> c, const std::u16string& args) {
|
||||||
string data = parse_data_string(encode_sjis(args));
|
string data = parse_data_string(encode_sjis(args));
|
||||||
|
data.resize((data.size() + 3) & (~3));
|
||||||
c->channel.send(data);
|
c->channel.send(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void proxy_command_send_client(shared_ptr<ServerState>,
|
static void proxy_command_send_client(shared_ptr<ServerState>,
|
||||||
ProxyServer::LinkedSession& session, const std::u16string& args) {
|
ProxyServer::LinkedSession& session, const std::u16string& args) {
|
||||||
string data = parse_data_string(encode_sjis(args));
|
string data = parse_data_string(encode_sjis(args));
|
||||||
|
data.resize((data.size() + 3) & (~3));
|
||||||
session.client_channel.send(data);
|
session.client_channel.send(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void proxy_command_send_server(shared_ptr<ServerState>,
|
static void proxy_command_send_server(shared_ptr<ServerState>,
|
||||||
ProxyServer::LinkedSession& session, const std::u16string& args) {
|
ProxyServer::LinkedSession& session, const std::u16string& args) {
|
||||||
string data = parse_data_string(encode_sjis(args));
|
string data = parse_data_string(encode_sjis(args));
|
||||||
|
data.resize((data.size() + 3) & (~3));
|
||||||
session.server_channel.send(data);
|
session.server_channel.send(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-3
@@ -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")) {
|
} else if ((command_name == "sc") || (command_name == "ss")) {
|
||||||
string data = parse_data_string(command_args, nullptr, ParseDataFlags::ALLOW_FILES);
|
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) {
|
if (data.size() == 0) {
|
||||||
throw invalid_argument("no data given");
|
throw invalid_argument("no data given");
|
||||||
}
|
}
|
||||||
|
data.resize((data.size() + 3) & (~3));
|
||||||
|
|
||||||
shared_ptr<ProxyServer::LinkedSession> proxy_session;
|
shared_ptr<ProxyServer::LinkedSession> proxy_session;
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user