aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/TextureAndGeometryPacket.cpp
diff options
context:
space:
mode:
authorLoki Rautio <lokirautio@gmail.com>2026-03-09 04:45:14 -0500
committerLoki Rautio <lokirautio@gmail.com>2026-03-09 04:45:14 -0500
commitd557ca2dfba5ffcca99ceb41b07d149f871964b5 (patch)
tree89ef5bd5fdb2a86fe10a5dead65b65bce8aa0a1d /Minecraft.World/TextureAndGeometryPacket.cpp
parent0c4f4599045edad935403e4d79d28f6b9aa95833 (diff)
LCEMP RCE fixes
Based on commit d017bfc30a68888bf5c79b23cf5c4f607cf828bf
Diffstat (limited to 'Minecraft.World/TextureAndGeometryPacket.cpp')
-rw-r--r--Minecraft.World/TextureAndGeometryPacket.cpp29
1 files changed, 27 insertions, 2 deletions
diff --git a/Minecraft.World/TextureAndGeometryPacket.cpp b/Minecraft.World/TextureAndGeometryPacket.cpp
index bf5eccdb..1c920ee7 100644
--- a/Minecraft.World/TextureAndGeometryPacket.cpp
+++ b/Minecraft.World/TextureAndGeometryPacket.cpp
@@ -121,7 +121,20 @@ void TextureAndGeometryPacket::read(DataInputStream *dis) //throws IOException
{
textureName = dis->readUTF();
dwSkinID = static_cast<DWORD>(dis->readInt());
- dwTextureBytes = static_cast<DWORD>(dis->readShort());
+
+ short rawTextureBytes = dis->readShort();
+ if (rawTextureBytes <= 0)
+ {
+ dwTextureBytes = 0;
+ }
+ else
+ {
+ dwTextureBytes = (DWORD)(unsigned short)rawTextureBytes;
+ if (dwTextureBytes > 65536)
+ {
+ dwTextureBytes = 0;
+ }
+ }
if(dwTextureBytes>0)
{
@@ -134,7 +147,19 @@ void TextureAndGeometryPacket::read(DataInputStream *dis) //throws IOException
}
uiAnimOverrideBitmask = dis->readInt();
- dwBoxC = static_cast<DWORD>(dis->readShort());
+ short rawBoxC = dis->readShort();
+ if (rawBoxC <= 0)
+ {
+ dwBoxC = 0;
+ }
+ else
+ {
+ dwBoxC = (DWORD)(unsigned short)rawBoxC;
+ if (dwBoxC > 256)
+ {
+ dwBoxC = 0; // sane limit for skin boxes
+ }
+ }
if(dwBoxC>0)
{