Browse Source

Validat input to a few simple network messages

pull/3009/head
Anders Jenbo 5 years ago
parent
commit
d227ff33da
  1. 60
      Source/msg.cpp

60
Source/msg.cpp

@ -616,76 +616,78 @@ void NetSendCmdExtra(const TCmdGItem *p)
DWORD OnWalk(const TCmd *pCmd, Player &player)
{
auto *p = (TCmdLoc *)pCmd;
const auto &message = *reinterpret_cast<const TCmdLoc *>(pCmd);
const Point position { message.x, message.y };
if (gbBufferMsgs != 1 && currlevel == player.plrlevel) {
if (gbBufferMsgs != 1 && currlevel == player.plrlevel && InDungeonBounds(position)) {
ClrPlrPath(player);
MakePlrPath(player, { p->x, p->y }, true);
MakePlrPath(player, position, true);
player.destAction = ACTION_NONE;
}
return sizeof(*p);
return sizeof(message);
}
DWORD OnAddStrength(const TCmd *pCmd, int pnum)
{
auto *p = (TCmdParam1 *)pCmd;
const auto &message = *reinterpret_cast<const TCmdParam1 *>(pCmd);
if (gbBufferMsgs == 1)
SendPacket(pnum, p, sizeof(*p));
else if (p->wParam1 <= 256)
ModifyPlrStr(pnum, p->wParam1);
SendPacket(pnum, &message, sizeof(message));
else if (message.wParam1 <= 256)
ModifyPlrStr(pnum, message.wParam1);
return sizeof(*p);
return sizeof(message);
}
DWORD OnAddMagic(const TCmd *pCmd, int pnum)
{
auto *p = (TCmdParam1 *)pCmd;
const auto &message = *reinterpret_cast<const TCmdParam1 *>(pCmd);
if (gbBufferMsgs == 1)
SendPacket(pnum, p, sizeof(*p));
else if (p->wParam1 <= 256)
ModifyPlrMag(pnum, p->wParam1);
SendPacket(pnum, &message, sizeof(message));
else if (message.wParam1 <= 256)
ModifyPlrMag(pnum, message.wParam1);
return sizeof(*p);
return sizeof(message);
}
DWORD OnAddDexterity(const TCmd *pCmd, int pnum)
{
auto *p = (TCmdParam1 *)pCmd;
const auto &message = *reinterpret_cast<const TCmdParam1 *>(pCmd);
if (gbBufferMsgs == 1)
SendPacket(pnum, p, sizeof(*p));
else if (p->wParam1 <= 256)
ModifyPlrDex(pnum, p->wParam1);
SendPacket(pnum, &message, sizeof(message));
else if (message.wParam1 <= 256)
ModifyPlrDex(pnum, message.wParam1);
return sizeof(*p);
return sizeof(message);
}
DWORD OnAddVitality(const TCmd *pCmd, int pnum)
{
auto *p = (TCmdParam1 *)pCmd;
const auto &message = *reinterpret_cast<const TCmdParam1 *>(pCmd);
if (gbBufferMsgs == 1)
SendPacket(pnum, p, sizeof(*p));
else if (p->wParam1 <= 256)
ModifyPlrVit(pnum, p->wParam1);
SendPacket(pnum, &message, sizeof(message));
else if (message.wParam1 <= 256)
ModifyPlrVit(pnum, message.wParam1);
return sizeof(*p);
return sizeof(message);
}
DWORD OnGotoGetItem(const TCmd *pCmd, Player &player)
{
auto *p = (TCmdLocParam1 *)pCmd;
const auto &message = *reinterpret_cast<const TCmdLocParam1 *>(pCmd);
const Point position { message.x, message.y };
if (gbBufferMsgs != 1 && currlevel == player.plrlevel) {
MakePlrPath(player, { p->x, p->y }, false);
if (gbBufferMsgs != 1 && currlevel == player.plrlevel && InDungeonBounds(position)) {
MakePlrPath(player, position, false);
player.destAction = ACTION_PICKUPITEM;
player.destParam1 = p->wParam1;
player.destParam1 = message.wParam1;
}
return sizeof(*p);
return sizeof(message);
}
DWORD OnRequestGetItem(const TCmd *pCmd, Player &player)

Loading…
Cancel
Save