diff options
-rw-r--r-- | src/actions/actions.cpp | 2 | ||||
-rw-r--r-- | src/net/eathena/mail2handler.cpp | 15 |
2 files changed, 12 insertions, 5 deletions
diff --git a/src/actions/actions.cpp b/src/actions/actions.cpp index 6c1025650..a8ad2a63f 100644 --- a/src/actions/actions.cpp +++ b/src/actions/actions.cpp @@ -1658,7 +1658,7 @@ impHandler(useItemInv) { Item *const item = getItemByInvIndex(param1, InventoryType::Inventory); - PlayerInfo::useEquipItem(item, param2, Sfx_true); + PlayerInfo::useEquipItem(item, CAST_S16(param2), Sfx_true); } else { diff --git a/src/net/eathena/mail2handler.cpp b/src/net/eathena/mail2handler.cpp index c52a7b5f7..3c412fc4e 100644 --- a/src/net/eathena/mail2handler.cpp +++ b/src/net/eathena/mail2handler.cpp @@ -27,6 +27,8 @@ #include "net/eathena/messageout.h" #include "net/eathena/protocolout.h" +#include "utils/checkutils.h" + #include "resources/item/item.h" #include "debug.h" @@ -106,14 +108,19 @@ void Mail2Handler::sendMail(const std::string &to, return; const std::string from = localPlayer->getName(); - const int titleSz = title.size(); - const int bodySz = body.size(); - int16_t sz = 2 + 2 + 24 + 24 + 8 + 2 + 2 + titleSz + bodySz; + const int titleSz = CAST_S32(title.size()); + const int bodySz = CAST_S32(body.size()); + int32_t sz = 2 + 2 + 24 + 24 + 8 + 2 + 2 + titleSz + bodySz; + if (sz > INT16_MAX - 4) + { + reportAlways("Mail message too big"); + return; + } if (packetVersion >= 20160600) sz += 4; createOutPacket(CMSG_MAIL2_SEND_MAIL); - outMsg.writeInt16(sz, "len"); + outMsg.writeInt16(CAST_S16(sz), "len"); outMsg.writeString(to, 24, "to"); outMsg.writeString(from, 24, "from"); outMsg.writeInt64(money, "money"); |