From 861988e0be6a102826778c813ac218c0d9e73b4b Mon Sep 17 00:00:00 2001 From: Jordan Cristiano Date: Wed, 20 Apr 2016 22:42:43 -0400 Subject: [PATCH] Fixed incorrect bitbuf parameters for wip stringtables parsing --- demboyz/netmessages/svc_createstringtable.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/demboyz/netmessages/svc_createstringtable.cpp b/demboyz/netmessages/svc_createstringtable.cpp index 702016d..ec29c97 100644 --- a/demboyz/netmessages/svc_createstringtable.cpp +++ b/demboyz/netmessages/svc_createstringtable.cpp @@ -110,14 +110,20 @@ namespace NetHandlers const size_t numEncodeBits = math::log2(data->maxEntries); data->numEntries = bitbuf.ReadUBitLong(numEncodeBits + 1); + + size_t dataLengthInBits; if (context.protocol > 23) { - data->dataLengthInBits = bitbuf.ReadVarInt32(); + dataLengthInBits = bitbuf.ReadVarInt32(); + data->dataLengthInBits = dataLengthInBits; } else { - data->dataLengthInBits = bitbuf.ReadUBitLong(NET_MAX_PAYLOAD_BITS_OLD + 3); + dataLengthInBits = bitbuf.ReadUBitLong(NET_MAX_PAYLOAD_BITS_OLD + 3); + data->dataLengthInBits = dataLengthInBits; } + const size_t dataLengthInBytes = math::BitsToBytes(dataLengthInBits); + data->isUserDataFixedSize = bitbuf.ReadOneBit() != 0; if (data->isUserDataFixedSize) { @@ -133,13 +139,13 @@ namespace NetHandlers { data->compressedData = bitbuf.ReadOneBit() != 0; } - data->data.reset(new uint8_t[math::BitsToBytes(data->dataLengthInBits)]); - bitbuf.ReadBits(data->data.get(), data->dataLengthInBits); + data->data.reset(new uint8_t[dataLengthInBytes]); + bitbuf.ReadBits(data->data.get(), dataLengthInBits); #ifdef WIP_STRINGTABLE if (data->compressedData) { - bf_read bitbuf2(data->data.get(), data->dataLengthInBits); + bf_read bitbuf2(data->data.get(), dataLengthInBytes, dataLengthInBits); const uint32_t decompressedNumBytes = bitbuf2.ReadUBitLong(32); const uint32_t compressedNumBytes = bitbuf2.ReadUBitLong(32); std::unique_ptr compressedData(new uint8[compressedNumBytes]); @@ -152,7 +158,7 @@ namespace NetHandlers } else { - bf_read bitbuf2(data->data.get(), data->dataLengthInBits); + bf_read bitbuf2(data->data.get(), dataLengthInBytes, dataLengthInBits); StringTable_BitRead(bitbuf2, context, data); } #endif // WIP_STRINGTABLE