Skip to content

Commit f101fdd

Browse files
MaullerjbremerSkyaero42
committed
bugfix(network): Prevent buffer overflow in NetPacket::readFileMessage() and NetPacket::readFileAnnounceMessage()
Co-authored-by: JBremer <[email protected]> Co-authored-by: SkyAero <[email protected]>
1 parent e6e874e commit f101fdd

File tree

1 file changed

+6
-16
lines changed

1 file changed

+6
-16
lines changed

Core/GameEngine/Source/GameNetwork/NetPacket.cpp

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5807,15 +5807,10 @@ NetCommandMsg * NetPacket::readWrapperMessage(UnsignedByte *data, Int &i) {
58075807
NetCommandMsg * NetPacket::readFileMessage(UnsignedByte *data, Int &i) {
58085808
NetFileCommandMsg *msg = newInstance(NetFileCommandMsg);
58095809
char filename[_MAX_PATH];
5810-
char *c = filename;
58115810

5812-
while (data[i] != 0) {
5813-
*c = data[i];
5814-
++c;
5815-
++i;
5816-
}
5817-
*c = 0;
5818-
++i;
5811+
// TheSuperHackers @security Mauller/Jbremer/SkyAero 11/12/2025 Prevent buffer overflow when copying filepath string
5812+
i += strlcpy(filename, reinterpret_cast<const char*>(data), ARRAY_SIZE(filename));
5813+
++i; //Increment for null terminator
58195814
msg->setPortableFilename(AsciiString(filename)); // it's transferred as a portable filename
58205815

58215816
UnsignedInt dataLength = 0;
@@ -5834,15 +5829,10 @@ NetCommandMsg * NetPacket::readFileMessage(UnsignedByte *data, Int &i) {
58345829
NetCommandMsg * NetPacket::readFileAnnounceMessage(UnsignedByte *data, Int &i) {
58355830
NetFileAnnounceCommandMsg *msg = newInstance(NetFileAnnounceCommandMsg);
58365831
char filename[_MAX_PATH];
5837-
char *c = filename;
58385832

5839-
while (data[i] != 0) {
5840-
*c = data[i];
5841-
++c;
5842-
++i;
5843-
}
5844-
*c = 0;
5845-
++i;
5833+
// TheSuperHackers @security Mauller/Jbremer/SkyAero 11/12/2025 Prevent buffer overflow when copying filepath string
5834+
i += strlcpy(filename, reinterpret_cast<const char*>(data), ARRAY_SIZE(filename));
5835+
++i; //Increment for null terminator
58465836
msg->setPortableFilename(AsciiString(filename)); // it's transferred as a portable filename
58475837

58485838
UnsignedShort fileID = 0;

0 commit comments

Comments
 (0)