Implement proper bounds checks across the codebase (#681)

* Implement proper bounds checks across the codebase

* Implement strnlen_s for cross platform
This commit is contained in:
Jett
2022-07-27 02:52:04 +01:00
committed by GitHub
parent 9813c3ed2c
commit 9e08bb20d2
3 changed files with 18 additions and 8 deletions

View File

@@ -46,22 +46,25 @@ int64_t PacketUtils::ReadPacketS64(uint32_t startLoc, Packet * packet) {
return *(int64_t*)t.data();
}
std::string PacketUtils::ReadString(uint32_t startLoc, Packet* packet, bool wide) {
std::string readString = "";
std::string PacketUtils::ReadString(uint32_t startLoc, Packet* packet, bool wide, uint32_t maxLen) {
std::string readString = "";
if (wide) maxLen *= 2;
if (packet->length > startLoc) {
uint32_t i = 0;
while (packet->data[startLoc + i] != '\0' && packet->length > (uint32_t)(startLoc + i)) {
while (packet->data[startLoc + i] != '\0' && packet->length > (uint32_t)(startLoc + i) && maxLen > i) {
readString.push_back(packet->data[startLoc + i]);
if (wide) {
i += 2; // Wide-char string
} else {
}
else {
i++; // Regular string
}
}
}
return readString;
}

View File

@@ -11,7 +11,7 @@ namespace PacketUtils {
uint32_t ReadPacketU32(uint32_t startLoc, Packet * packet);
uint64_t ReadPacketU64(uint32_t startLoc, Packet * packet);
int64_t ReadPacketS64(uint32_t startLoc, Packet * packet);
std::string ReadString(uint32_t startLoc, Packet * packet, bool wide);
std::string ReadString(uint32_t startLoc, Packet * packet, bool wide, uint32_t maxLen = 33);
void WritePacketString(const std::string& string, uint32_t maxSize, RakNet::BitStream * bitStream);
void WriteString(RakNet::BitStream& bitStream, const std::string& s, uint32_t maxSize);